Linux常用工具:gcc,gdb和makefile的学习

一,软件包管理工具-yum

软件包管理工具:安装其他的软件工具

yum(包管理器)–类似于手机上的应用商店—redhat系列Linux中默认的管理工具。提供软件包的查看,安装,移除等管理操作

三板斧操作:
1.查看软件包:yum list ----查看所有软件包
yum search–搜索指定软件包(示例:yum search gcc / yum makecache将软件包信息保存到本地)
2.安装软件包:1.su root; 安装软件包必须具有管理员权限; yum install–安装软件包 (示例:yum install lrzsz)
3.卸载软件包:1.su root; 卸载软件包必须具有管理员权限; yum remove–卸载软件包 (示例:yum remove lrzsz)

二,编辑器-vim

vim–Linux下非常常用的一个编译器
vim是一个命令行编辑器,其中不能使用鼠标(使用鼠标是无效的)–在命令行中实现光标的移动,文本的操作,文本的编辑。因此vim具有多种操作模式:12种,常用的有3种:插入模式,普通模式,底行模式

vim的三种模式:

插入模式:进行文本数据的编辑插入
普通模式:进行文本常见的操作--复制,剪切,粘贴,删除,撤销,返回,文本对齐,光标移动
底行模式:进行文本的保存退出,以及文本的匹配,查找,替换等操作

vim的基本使用:
打开文件:vim filename—打开一个已有的文件,如果没有就会创建,打开文件后默认处于普通模式(所有模式都是围绕普通模式切换的)(注意:所在目录必须具有可写权限)
vim的操作模式转换:
普通模式—>插入模式:

i--直接进入插入模式;
a--光标后移一个字符,进入插入模式;
o--在光标所在行下方创建新行,进入插入模式;

普通模式—>底行模式:

使用英文冒号: 进入底行模式,实现文本的保存和退出操作;
	:q-退出,
	:w-保存  
	:wq-保存并退出 
	:q!-强制退出-不保存

其它模式—>普通模式:

任何模式按下ESC键,都可以返回普通模式

注意:
vim打开文件,每次其实是打开一个临时文件,作为中间交换文件,然后关闭源文件,编辑的操作都是在中间文件中完成的,只有正规退出 :wq的时候才会将改变的数据写入源文件中,并且删除中间文件。
否则中间文件存在的情况下,下次vim打开文件的时候,就会有提示信息(删除这个中间文件后就没有)

普通模式下的操作指令:
光标移动:h/j/k/l-上下左右移动光标,w/b按单词移动光标,ctrl+f/b上下翻页
文本操作:

gg    回到当前文本的首行
G     移动到当前文本的尾行
gg=G  调整代码的格式

删除

x  删除当前光标的字符
X  删除当前光标的前一个字符,直到当前光标前字符删除完
dw 删除单词
[num]x 删除从当前光标位置开始删除num个字符
[num]X 删除当前光标所在位置的前num个字符
dd  删除光标所在的那一行数据
[num]dd 向下删除包含光标在内的多行数据

复制

  yy 复制当前光标所在的这行数据
  [num]yy 复制多行数据
  yw 拷贝光标所在字
  [num]yw 从包含光标所在字开始拷贝num个字
  p 向光标的下一行去粘贴
  P 向光标的上一行去粘贴

替换

r 替换当前光标所在字符
  流程:在普通模式下,按一个r,表示替换光标所在的字符,接下来,按想要替换成的字符
R 替换多个字符,会先切换到replace模式,一直替换,如果替换完成了,按ESC返回到普通模式

撤销

u 撤销上次动作
ctrl+r 反撤销

更改

cw 更改光标当前所在的一个字
c[num]w 从当前光标位置开始更改num个字

num G  表示光标跳至文章的第num行行首

vim 的底行模式:

:set nu
:set nonu
:%s/[deststr]/[srcstr]/g 将全文的deststr全部替换成srcstr
:s/[deststr]/[srcstr]/g 将光标所在行的所有deststr全部替换成srcstr
:[num1,num2]s/[deststr]/[srcstr]/g 从num1到num2行的deststr全部替换成srcstr

三,编译器-gcc

编译器—gcc/g++将我们所写的高级语言代码解释成为机器指令集
gcc是C语言编译器,g++是C++编译器;不同语言有自己的编译器。

编译流程:
1.预处理–展开头文件,宏替换,去注释,条件编译

gcc -E [filename].c -o [filename].i

选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。
2.编译–语法语义检测,没有错误则解释为汇编指令

gcc -S [filename].c -o [filename].s

3.汇编–将汇编指令解释成为机器指令

gcc -c [filename].c -o [filename].o
如果只编译到汇编位置为止就一定要加-c选项

4.链接–将所有用到的机器指令文件打包到一起,生成可执行程序。

 gcc [filename].o -o [execfilename]

链接库文件的时候,有两种链接方式:

静态链接:产生的可执行文件大,会将所有依赖的信息全部编译到可执行程序当中去,但是运行时不需要额外依赖加载库文件,但是如果多个程序使用了相同的静态库,则运行时会在内存中造成代码冗余,可移植程度高

gcc [filename].c -o [execfilename] -static

动态链接:产生的可执行文件小,会将所依赖的信息记录在符号表当中,运行时需要加载动态库,不会在内存中造成代码冗余,可移植程序低。对公司来说一般都是采用这个链接方式,因为会将各个模块解耦出来

gcc [filename].c -o [execfilename] 

gcc编译器,在链接生成可执行程序时,会默认链接标准C库,默认的链接方式为动态链接

四 ,调试器-gdb

调试一个程序的运行过程,能够让我们从运行过程中发现程序哪里有问题,可以适当的改变数据达到某种目的。并不是所有的程序都可以调试,调试器只能调试具有调试符号信息的程序–debug版本的程序

gcc生成可执行程序。默认会生成release版本的程序,程序中没有调试符号信息,想要生成debug版本需要加上-g选项。
调试一个程序前提:这个程序是一个debug版本程序,是gcc -g a.c b.c -o main生成的程序。
1.调试器加载程序

gdb ./main直接使用gdb加载程序
gdb -p 30507直接对一个正在运行中程序进行调试,-p用于指定进程id

2.开始调试程序

run直接运行
start开始逐步调试

3.常用调试指令
a.流程控制

next/n下一步,遇到函数直接运行,不会跟踪进入
step/s下一步,遇到函数则跟踪进入函数
list/l默认查看调试行附近代码,也可以指定行 list a.c:20
until直接运行到指定行,也可以执行文件 until a.c:25
continue/c继续运行,直到断点处停下

b.断点操作

break a.c:9给指定文件指定行打断点,程序运行到断点就会停下
break function给函数打断点
info break查看断点信息
watch给变量打断点,当变量数据发生改变的时候停下
delete/d删除断点

c.内存操作

print/p查看变量数据 print a; 设置变量数据 print a=10;
backtrace查看程序运行调用栈信息,程序一旦崩溃,查看调用栈可以快速定位崩溃位置–栈顶函数

五,项目自动化构建工具-make/makefile

Makefile:普通的文本文件,用于记录项目的构建规则流程
make:Makefile解释程序,对Makefile中的构建规则流程进行解释执行,完成项目的构建

1.makefile的编写规则:
目标对象:依赖对象
制表符\t 编译命令
在这里插入图片描述

目标对象:是要生成的可执行程序的名称
依赖对象:是生成目标对象所需要的原码文件

2.make的执行规则:

1.一旦在命令行执行make,则运行make解释程序,在当前目录下找Makefile文件
2.make的执行规则中,要生成目标对象,首先要先保证依赖对象已经生成,则会递归向下寻找依赖对象的生成规则。
3.打开文件,找到第一个目标对象,与依赖对象进行时间关系判断,判断目标对象是否需要重新生成(只生成第一个目标对象就会退出)
4.若需要生成,则执行指令;(指令不一定非是生成目标对象的指令)

在这里插入图片描述

3.Makefile编写规则进阶:

make中的预定义变量:预定义变量通常都是在执行指令中使用

   $@:表示目标对象
   $^:表示所有依赖对象
   $<:表示所有依赖对象中的第一个依赖对象
   % 通配符的使用:匹配识别任意字符串

在这里插入图片描述
wildcard/patsubst关键字的使用
在这里插入图片描述
clean:makefile中的清理命令

clean:
	rm -rf main$(obj)

伪对象的声明使用:
.PHONY:目标对象名称
伪对象的作用:不管对象是否最新,每次都要重新生成

.PHONY:clean
clean:
	rm -rf main $(obj)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值