目录
7.makefile和make
7.2makefile和make的介绍
makefile文件:linux上的项目工程管理工具,可以实现自动化编译
后期一个项目工程里面的源文件不计其数,makefile文件里可以定义一系列的规则来指定哪一些文件先需要进行编译,哪些后编译,哪些重新编译,甚至更复杂的操作,makefie文件就像一个shell脚本,可以执行一系列命令
make:是一个命令,可以解释makefile文件中的指令
从另一个角度来说,一个人会不会写makefile表明他是否具有完成大型工程的能力
7.3make的使用规则
例如:现有三个文件 main.c max.c add.c
若通过gcc编译,修改一个文件,其他文件也需要重新编译
- 此时通过make命令执行makefile文件,只会将修改过的文件或者依赖修改过文件的文件
使用make命令根据makefile文件的规则生成可执行文件:
- 修改main.c中的值后使用make命令,未修改的文件不受影响
- clean命令:保持整洁
8.gdb调试
8.1Debug和Relese版本
debug版本叫做开发者版本或可调式版本,生成的可执行文件里面包含调试需要用到的信息,开发人员,最常用的就是debug版本产生的可执行文件
relese版本是发行版本,面向用户的,里面没有调试信息,体积较debug版本的小
注意:gcc默认relese版本
8.2gcc生成的debug版本的可执行文件
debug版本的生成:因为调试信息是在编译阶段加入到可重定向的目标文件(.o)中的,所以必须在编译阶段就让他添加调试信息进来
命令信息如下:
第一种方式:首先gcc -c main.c -g(生成的中间文件main.o这是包含调试信息)
然后通过gcc -o main main.o(生成debug版本的可执行文件)
第二种方式:一步生成,gcc -o main main.c -g
8.3 通过gdb进入调试
首先需要将源文件编译,链接生成debug版本的可执行文件,然后通过“gdb debug版本的可执行文件名”,就可以进入gdb调试模式
- l //显示当前文件的源代码
- list filename: num //显示filename文件中第nem行附近的源代码
- b 行号 //给指定行加断点
- info break//显示所有断点信息
- delete 断点编号//删除对应的编号
- r //启动程序
- q //退出调试
- p buff //临时打印数组所有元素的值
- p val //临时打印变量val的值
- p &val //临时打印val的地址
- p a+b //临时打印表达式的值
- p *parr@num //通过指向数组的指针打印数组的元素值
- display buff //自动显示监视对象,操作格式和p一致
- info display //显示所有自动显示监视对象的信息
- undisplay 编号 //删除所有自动显示监视对象的信息
- n // (next) //单步执行 逐过程(VS里F10)
- s //进入到将被调用的函数中(逐语句)
- finish //跳出函数
- c //(continue)//继续执行,直到执行到下一个断点
- ptype val //显示变量的数据类型