linux编程必备(yum vim gcc g++ gdb makefile)
文章目录
yum
(等同于手机上的应用市场)
Linux中安装软件并不简单
方法
1.源码安装,编译一个源码进行安装
2.rpm安装,安装包
3.Linux可能存在大量软件之间的依赖关系,就需要安装许多第三方库,安装非常麻烦,因此可以使用
yum,自己会考虑依赖关系,而不许要我们去处理
查找软件
可以搭配grep进行搜索过滤
下载安装
yum install (软件名)
删除软件
yum remove (软件名)
vim
- IDE集成开发环境,干什么都可以,而linux里面可以安装这样的集成开发环境,但是我们一般不会这么做
- 编写代码 —》vim(vi的升级版).vi 文本编辑器,从定位上和记事本没有任何差别,都是用来写代码的(只能写代码)
- 编译代码
- 调试代码
- 发布代码,运行
代码关系的维护(.h文件谁包含谁)
这些写代码都要包含
vim是多模式的编辑器
(默认是命令模式)
进入后按i可以插入文字
还有底行模式
命令模式
光标我们不用键盘中的上下左右而用hjkl
h 在这4个字母的最左边所以是光标向左移动
l在最右边所以是向右移动
j(jump)向下跳,所以是向下移动
k(king)国王高高在上,所以向上移动
光标位置锚点,快速定位到行首 shift+^
行尾 shift+$
gg光标直接定位到第一行
shift+g直接定位到行尾
n+shift +g 快速定位到指定行
w可以按照单词为单位,一个单词一个单词向后进行查找
b向前移动
复制粘贴
yy复制当前行
p就粘贴
n+p就是一次重复粘贴n行
2yy就从当前行往下两行复制(多行复制)
u就可以撤销之前的操作
dd:删除当前光标所在行
dd+p就是剪切
n+dd就是
shift+~大小写切换
(小写)x就会把当前所在光标的1个字符给删掉
n+x就会把光标之后的n个字符给删掉
(大写)X就会从光标处往前删除字符
n+X就会从光标处往前删除n个字符
r可以替换光标处的字符
shift r(替换模式),可以实现多个内容的替换
ctrl r撤销刚才的撤销
在插入模式也可以这样弄,但是特别慢
底行模式
shift :
set nu可以把行号调出来
set nonu就取消行号
vs .c可以实现不同文件的分屏显示
ctrl ww就可以在不同屏中光标切换
wq就是退出光标所在的屏幕
w是保存
q是退出
!强制
插入模式
进入插入模式有
a光标往后移动一位进入插入模式
o就是光标往下一行进入插入模式
插入模式不能进入底行模式
vim的配置
vim配置在自己的配置文件中,只会影响自己的操作,不会影响别的用户
root有自己的配置文件,只影响自己,
(只会影响自己,不会影响别人)
gcc和g++
gcc
背景知识
- 预处理(进行宏替换,去注释,头文件展开,条件编译)
- 编译(生成汇编)
- 汇编(生成机器可识别代码)
- 连接(生成可执行文件或库文件)
1.为什么c程序的翻译是这个过程
- 一开始都是二进制编程(打孔编程),只有高级科研人才才可以写
- 出现了汇编语言 助记符,利用编译器变成二进制代码
- 出现了c语言,先变成汇编语言,更加简单,开发效率更加高
C语言中有很多需要被提前处理的,比如注释等
2.链接如何理解
自己写的c程序和语言上或者第三方库
gcc简单演示
在vim上编写mycode.c文件gcc是编译c语言程序
- gcc [目标文件]
- ./a.out
gcc选项
预处理
gcc -E mycode.c :开始进行翻译,完成预处理之后,就停下来不做下面的事情
将预处理生成的写入一个临时文件 mycode.i(已经经过了预处理阶段)
编译
gcc -S mycode.c(-S,开始进行程序的翻译,完成编译之后就停下来就不要往后走了)
因为已经经过了预处理所以可以直接使用mycode.i,跳过预处理阶段,并将生成的临时文件放入mycode.s里面
生成了汇编语言
汇编
计算机不可以直接执行汇编语言
汇编语言需要编译器
gcc -c mycode.c(从源文件开始)
也可以gcc -c mycode.s
汇编形成的二进制文件并不可以直接执行,叫做可重定向目标文件
链接
语言也是有库的!调用了第三方的语言库(一套头文件+一套库文件(libc.a,libc.so))需要链接将我们自己的代码中的函数调用,外部数据,和库关系起来
- gcc mycode.o
gcc mycode.o -o mycode
自定义生成可执行程序的名字
./mycode
方便的时候也可以
gcc mycode.c -o mycode(生成可执行程序)推荐
./mycode
函数库
linux分为:
- 静态库: .a,指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为“.a”,静态链接
- 动态库: .so 在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销,一般后缀名为“.so”,动态链接
(都和程序成功运行有关)
gcc默认采用动态链接方式,形成可执行程序
如果想要采用静态链接 -static
g++
编译c++程序,g++也可以编译c语言
g++和gcc的选项和过程都是一样的
Linux可以直接跑很多语言如python,shell
gdb
调试代码
gdb带上可执行程序的名字
如果一个程序可以被调试的,该程序的二进制文件一定加入了一些debug信息
release去掉了debug信息
linux中默认的可执行程序是release
但是我们如果想要调试的话,要g++ mycode.cpp -o mycode -g
加入-g选项就可以了
选项
run
相当于f5
list/l
会显示代码,一次显示10行,再l会接上之前代码后面显示
l 1会从第一行开始显示
b(breakpoint)(打断点)
b (行)
info b(显示断点)
再r一下,就在断点处停了下来
条件断点
b if cond
s
相当于f11
n
相当于f10
display
(常显示,每次调试都会显示一次)
相当于监视窗口查看一个变量的值
p
只显示一次
undisplay
不想再常显示之前设的变量,同样这个地方设置的是编号
finish(结束当前函数)
可以自行的把一个函数给跑完
c(continue)
直接跳到下一个断电
until
直接跳到某一行
until 12
d
删除断电
d (几号断电)
disable
禁用断电
disable (第几个断点)
enable就开启断点
skip
- 跳过某个指定的函数
skip function
跳过了指定的函数mint
跳过指定文件的所有函数,这样比较简化方便
skip file filename
跳过了目录下的一系列文件(可以使用通配符来操作)
skip -gfi directory/*.cpp
!
在gdb中使用!,可以在里面使用shell的命令
1 |
|
make/makefile
1.make是一条命令 ,makefile是一个文件
2.文件和文件之间的互相依赖关系
make和makefile可以达到我们形成可执行程序的目的
makefile
1.依赖关系
2.依赖方法
清理功能(删除可执行文件)
.PHONY 修饰对于的符号,伪目标(总是可执行的)的概念
make一次只会执行一个依赖关系,