您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

时间:2022-04-07 09:12:45  来源:  作者:程序那点事

一、软件包管理器yum

1.什么是软件包

linux下安装软件, 通常的办法是下载程序的源代码、编译、得到可执行程序。但是这样麻烦、不便于操作,于是一些人把常用的软件提前编译好, 做成软件包(可以理解成windows上的安装包)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。

软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系。

yum是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, centos等发行版上。

2.ping

由于yum是从服务器上获取安装包,关于 yum 的所有操作必须保证主机(虚拟机)网络畅通,网络是否畅通可以通过 ping 指令验证。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

3.查看所有软件包

通过yum list可以看到所有的软件包(软件包有很多,下图只截取了其中一部分)。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

通过与grep命令配合可以搜索出指定的软件包。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

4.安装软件包

通过sudo yum install xxx可安装xxx软件,这里以lrzsz为例进行安装。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

5.卸载软件包

卸载指令sudo yum remove xxx可卸载xxx软件包,操作同上。

二、编辑器vim

0.vim的配置

原生的vim不便于使用,需要通过配置来让它的使用更加方便。

(1)配置文件

在目录 /etc/ 下面,有一个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:.vimrc,在这里配置的vim不会影响其他用户。

进入用户的主工作目录,找到自己目录下的.vimrc文件,执行 vim .vimrc,即可配置自己的vim。

(2)配置vim

在其中输入特殊的命令即可修改vim的选项,可以用下面三条命令进行测试。

设置语法高亮: syntax on 显示行号: set nu 设置缩进的空格数为4: set shiftwidth=4

在shell命令行中执行下面的指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 "不推荐" 直接在 root 下执行),根据提示操作,即可将vim变成一个c++编译器。

curl -sLf gitee.com/HGtz2222/Vi… -o ./install.sh && bash ./install.sh

(原文地址:gitee.com/HGtz2222/Vi…

1.vim的模式

vim有许多模式,在我使用的服务器上有七种基本模式和六种附加模式。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

本文只介绍常用的三种模式:命令模式(Normal mode)、插入模式(Insert mode)、底行模式(last line mode)。

2.模式间的转变

先上一张图表示三种模式的关系。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

vim打开时默认是命令模式,如下。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

此时如果输入一般的代码很可能没有响应,因为在命令模式下,vim将输入的内容当做命令看待,如果我们按照代码输入,就很难会出现命令,所以大多数时候没有反应。

此时如果按一下i就可以转入插入模式,左下角会变成下图的样子,表示进入插入模式,这时就可以在编辑器内输入内容。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

这时再按Esc退回普通/命令模式。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

如果想要退出vim,则要在底行模式(shift+;即输入一个:)下输入q退出。输入w可以保存,但配置过的vim编辑器会自动保存,所以w可省略;如果用的是原生的vim(没有配置过的),就需要手动保存。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

3.命令模式(Normal mode)

(1)命令模式向插入模式转换

命令模式向插入模式转换可以输入:a(光标向后移动一个字符后进入插入模式),i(直接进入插入模式),o(换行后进入插入模式)。

(2)命令模式下常用的编辑命令

shift+^:光标定位到当前行的开头
shift+$:光标定位到当前行的末尾
shift+g:光标定位到当前文本的最后一个位置
gg:光标定位到当前文本的第一个位置
n+shift+g:光标定位到当前文本第n行的开头

yy:复制光标所在行
n+yy:从光标所在行开始,复制下面n行的内容

p:粘贴内容
n+p:将内容粘贴n行

u:撤销
ctrl+r:恢复刚刚的撤销

dd:删除光标所在的行(这里是剪切,也就是说删除后可直接粘贴被删除的内容)
n+dd:从光标所在行开始,删除下面n行的内容

shift+~:对光标所在的位置进行大小写转换

w:以“单词”为单位进行跳转,跳到下一个“单词”的开头(从左往右,从上到下)
b:以“单词”为单位进行跳转,跳到上一个“单词”的开头(从右往左,从下到上)
e:以“单词”为单位进行跳转,跳到下一个“单词”的结尾(从左往右,从上到下)
(这里的“单词”可能是一组字母,也可能是符号)

x:删除光标所在位置的内容
n+x:删除从光标开始n个位置的内容
shift+x:删除光标之前位置的内容(不包括光标所在位置)
shift+n+x:删除光标之前x个位置的内容(不包括光标所在位置)

r:输入r之后再输入内容会将光标所在位置的内容进行替换
n+r:替换从光标开始n个位置的内容(每个位置的内容都一样)
shift+r:进入替换模式,下面的操作全部是替换(按Esc返回命令模式)

h、j、k、l:左、下、上、右(和方向键的功能相同,但是建议用字母而不是方向键,因为方向键可能出现不兼容的问题)

ctrl+b:下翻一页
ctrl+f:上翻一页
ctrl+u:下翻半页
ctrl+d:上翻半页
复制代码

在命令模式下进行文本编辑的效率非常高,所以建议尽量在命令模式下编辑。

4.插入模式(Insert mode)

命令模式按a/i/o进如插入模式,插入模式与Windows下正常的文本编辑没什么区别,此处不再赘述。

5.底行模式(last line mode)

命令模式shift+;进入底行模式,常用的命令如下:

set nu:设置行号
set nonu:取消行号
w:写入(保存)
w!:强制写入(但也有可能写入不成功)
q:退出
q!:强制退出
!+其他命令:在底行模式下,输入!后即可执行ls,ll,gcc等命令,即不退出vim就看执行命令行的命令
复制代码

vs命令+filename:分屏显示,若filename不存在,则会新建。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 


Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

通过ctrl+w+w可在多个选项卡之间切换。

注意分屏不仅仅可以分两个,分屏可以分许多个。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

底行模式下退出分屏时,光标在哪个文件就退出哪个文件。

三、编译器gcc/g++

gcc用来对C语言文件编译,g++用来对c++文件编译,选项几乎是一样的,下面以gcc为例。

1.从源文件到可执行文件

从一个.c为后缀的源文件到一个.exe为后缀的可执行文件需要经过下面四个步骤。

(1)预处理(-E)

主要包括:头文件展开、去注释、宏替换、条件编译。 在Linux中可以通过gcc的–E选项来让源文件在预处理结束后停止并生成同名的.i后缀文件。

(2)编译(-S)

检查代码的规范性、是否有语法错误等,以确定代码实际要做的工作,在检查 无误后,把C语言代码翻译成汇编语言。 在Linux中可以通过gcc的–S选项来让源文件在编译结束后停止并生成同名的.s后缀文件。

(3)汇编(-c)

生成机器可识别代码,把编译阶段生成的.s文件转成目标.o文件,转化结束后,文件是二进制目标文件。 在Linux中可以通过gcc的–c选项来让源文件在汇编结束后停止并生成同名的.o后缀文件。

(4)链接(无选项)

将代码中库函数的调用和库中库函数的实现关联起来。

这里要介绍一个概念:函数库 函数库一般分为静态库和动态库两种。

静态库

链接时把库文件的代码全部加入到可执行文件中,因此生成的文件占用的空间比较大,但在运行时也就不再需要库文件了,这样程序的可移植性强。 静态库后缀名一般为.a。

动态库

链接时不把库文件的代码加入到可执行文件中,而是在程序执行时由链接文件加载库,生成的文件体积小、速度快,但可移植性差。 动态库一般后缀名为.so。

gcc在链接时默认使用动态库。

2.常用选项

除了上面的-E、-S、-c选项外,下面还有一些常用选项。

-static:此选项对生成的文件采用静态链接 -O0、-O1、-O2、-O3:编译器优化选项的4个级别,-O0表示没有优化,-O3优化级别最高 -w:不生成任何警告信息。 -Wall:生成所有警告信息。 -o+filename:将生成的文件命名为filename

四、调试器gdb

下面以一个简单的从1加到100的代码演示调试,源文件生成的可执行文件为Mytest。

代码如下:

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

直接gdb+被调试文件名进入调试,如下

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

但最后提示没有调试信息。这里是因为在Centos 7 gcc中默认生成的可执行程序是release版本的,不可被调试。通过编译时添加-g选项让程序成为debug版本。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

1.显示代码list/l

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

2.运行r

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

3.断点b、查看断点info、删除断点d

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

4.逐过程n(不进入函数)、逐语句s(进入函数)

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

5.临时查看变量的值p

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

6.添加查看display

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

7.取消查看undisplay

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

8.跳转until

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

9.结束函数finish

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

10.跳转到下一断点c

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

11.退出调试quit

五、自动化构建:make+makefile

1.背景

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建

2.依赖关系、依赖方法

举例如下:

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

makefile中一行是依赖关系,紧跟的一行是依赖方法。上面从一个.c文件到一个.exe文件经历的依赖关系和依赖方法写全后如下。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

mytest依赖test.o经过gcc链接得到,test.o依赖test.s经过gcc -c汇编得到,test.s依赖test.i经过gcc -S编译得到,test.i依赖test.c经过gcc -E预处理得到。 (冒号左边是得到的文件,冒号右边是被依赖的文件)

make后就可以得到所有需要的文件。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

虽然这些过程在这个场景下可以gcc一步搞定,但是如果有其它多个文件需要处理,这么多行的指令写进makefile后只需一个make即可全部执行,效率有很大的提高。

3.项目清理

可以看到上面产生了许多文件,如果一个个清理又会很麻烦,在makefile中 加入clean选项便可像make那样直接清除某些文件。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 


Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

上面的.PHONY是伪目标,这样写表示clean总是被执行。

4.宏替换

$@:依赖关系中的目标文件(冒号左边的文件)

$^:依赖关系中的依赖文件列表(冒号右边的所有文件)

$<:依赖关系中的一个依赖文件

将makefile修改为如下宏替换后的结果,这样当依赖文件或目标文件改变时,依赖方法不需要改变。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

仍能正常运行。

Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)

 

感谢阅读,如有错误请批评指正


作者:山舟
链接:
https://juejin.cn/post/7083141631775342606



Tags:Linux开发   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
超低成本!自制linux开发板,全开源
这是一款低成本linux开发板&mdash;&mdash;高性能异构边缘AI视觉开发板。作者参考树莓派A版型,将部分硬件替换。它的成本比树莓派低很多!却不一点比树莓派差!具体介绍如下!我还会...【详细内容】
2022-08-03  Search: Linux开发  点击:(1083)  评论:(0)  加入收藏
Linux开发工具(yum、vim、gcc/g++、gdb、make/makefile)
一、软件包管理器yum1.什么是软件包在Linux下安装软件, 通常的办法是下载程序的源代码、编译、得到可执行程序。但是这样麻烦、不便于操作,于是一些人把常用的软件提前编译好...【详细内容】
2022-04-07  Search: Linux开发  点击:(313)  评论:(0)  加入收藏
window下的linux开发解决方案
概述本篇文章是介绍在,wsl2里的centos7下部署gui开发环境。X ServerX Server的类型有很多种,我比较建议vcxsrv(名字记忆:vc x server),因为其功能和操作比较简单。安装成功后,首先...【详细内容】
2021-08-18  Search: Linux开发  点击:(397)  评论:(0)  加入收藏
Linux开发时常用Linux命令行使用技巧有哪些
今天扣丁学堂给大家介绍一下关于一些Linux培训之常用Linux命令行使用技巧汇总,这些工具在几位回答者的日常工作中都很有用。对于任何不了解的命令,请使用“man“查看,或者使用G...【详细内容】
2020-06-30  Search: Linux开发  点击:(395)  评论:(0)  加入收藏
如何搭建嵌入式linux开发环境?
对于初学者,只需要一台安装有Linux操作系统(比如Ubuntu)的PC即可,或者在windows下安装一个虚拟机软件(Vmware),虚拟一个Linux系统的主机,但是我建议还是安装真机,这样会迫使你必须在L...【详细内容】
2019-06-14  Search: Linux开发  点击:(1159)  评论:(0)  加入收藏
▌简易百科推荐
Meta如何将缓存一致性提高到99.99999999%
介绍缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从硬件缓存到操作系统、网络浏览器,尤其是后端开发。对于Meta这样的公司来说,缓存尤为重要,因为它有助于减少延迟、扩...【详细内容】
2024-04-15    dbaplus社群  Tags:Meta   点击:(1)  评论:(0)  加入收藏
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
前言SELECT COUNT(*)会不会导致全表扫描引起慢查询呢?SELECT COUNT(*) FROM SomeTable网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小...【详细内容】
2024-04-11  dbaplus社群    Tags:SELECT   点击:(1)  评论:(0)  加入收藏
10年架构师感悟:从问题出发,而非技术
这些感悟并非来自于具体的技术实现,而是关于我在架构设计和实施过程中所体会到的一些软性经验和领悟。我希望通过这些分享,能够激发大家对于架构设计和技术实践的思考,帮助大家...【详细内容】
2024-04-11  dbaplus社群    Tags:架构师   点击:(2)  评论:(0)  加入收藏
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(5)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(9)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(16)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(13)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(9)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(14)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(10)  评论:(0)  加入收藏
站内最新
站内热门
站内头条