Linux常用工具—02
编译器-gcc/g++
通常我们所写的c语言程序是一种高级的语言程序,这些程序cpu是无法直接识别的,需要编译器将我们所写的代码解释为机器指令之后才能执行。
1.编译过程
预处理:展开头文件、宏替换、去掉注释、条件编译
gcc -E test.c -o test.i
编译:检查语法,生成汇编代码
gcc -S test.i -o test.s
汇编:汇编代码转成二进制机器码
gcc -c test.s -o test.o
链接:将两个目标文件链接到一起
gcc test.o -o test
2.链接方式
动态链接:在连接时在可执行程序中记录库中函数符号信息表,并没有将具体函数的实现代码写入到可执行程序中,一次在以后运行这个程序时需要将库函数也加载到内存中,但是在内存中多个程序可以使用一个库(节省资源)。
静态链接:在链接函数库文件生成可执行程序的时候,直接将库中的代码实现写入到可执行程序中,生成的代码会比较大一点,但是运行的时候不需要依赖于库的存在。
gcc中默认的链接方式就是动态链接。
调试器-gdb
1.调试前提
程序调试的前提:生成一个debug版本的程序,程序中添加了调试符号信息。
在Linux下gcc编译器默认生成的是release版本的程序,不包含调试符号信息,无法调试。
因此在编译程序的时候需要增加gcc -g选项,表示生成debug版本的程序。
2.调试命令
gcc -g test.c -o test //生成dubug版本的程序
gdb test //对test进行调试
run //程序直接开始运行
start //开始逐步调试
list 5 list funcname //查看指定文件行/函数附近的代码
step //下一步,若当前调试位置是一个函数,则会进入函数
next //下一步,直接运行这一行函数
until 12 //直接运行到指定文件的指定行
continue //从当前位置继续运行
break 5 break funcname //打断点
info break //查看断点信息
delete //删除断点
watch variblename //变量监控,当变量内容发生变化则停下来
backtrace //查看程序运行信息中的函数调用栈
quit //退出调试
项目自动化构建工具-make/Makefile
Makefile:是一个普通的文本文件,在这个文件中可以遍历整个项目的编译流程规则
make:是一个Makefile解释程序,当前命令行下输入make,这时候这个解释程序会到当前路径下寻找名字叫做Makefile的文件,对其内部的内容进行解释执行。
示例:Makefile
test:test.o
gcc test.o -o test
test.o:test.s
gcc -c test.s -o test.o
test.s:test.i
gcc -S test.i -o test.s
test.i:test.c
gcc -E test.c -o test.i
上面的文件中test依赖test.o,test.o依赖于test.s,test.s依赖于test.i,test.i依赖于test.c。
预定义变量
main:main.o child.o
$<:依赖对象中的第一个对象文件 main.o
$^:所有依赖对象 mian.o child.o
$@:目标对象 main
伪声明对象:不管对象是否更新,每次都重新生成。
.PHONY:clean
项目版本管理工具-git
git clone //克隆远程服务器上的git仓库
git add ./* //添加本次修改的文件信息
git push //同步本地版本到git服务器
git push origin master //同步到服务器的master主分支