GCC编译器
源文件-》预处理-》编译-》汇编-》链接-》可执行文件
预处理(–E):处理以#开头的语句,如#include #define 等,产生一个*.i的文件。
gcc -E -o zmx.i zmx.c 等价于 gcc zmx.c –E –o zmx.i
预编译(–S):检查语法错误,无误后,把代码翻译成汇编语言,产生*.s文件
gcc -S -o zmx.s zmx.i
汇编(-c):将汇编文件转换成目标文件,产生*.o文件,它是二进制文件,但不可执行
gcc -c -o zmx.o zmx.s
链接(-o):链接各种静态库和动态库,得到可执行文件。(一步到位,自动清除前面步骤)
gcc -o star zmx.o
其他常用
gcc-o 生成指定的输出文件
gcc-v 查询gcc版本信息
gcc-g 生成调试信息,gdb调试器可以利用该信息
gcc-I 指定额外的头文件搜索路径
gcc-L 指定额外的函数库搜索路径
gcc-static 静态链接库,默认都是动态链接库
gcc-w 不生成任何警告信息
gcc-Wall 生成所有警告信息
GDB调试
first of all :在编译时,把调试信息加到可执行文件中
1、 进入(两种方式)
Ø gdb –》 file+文件名 -》q(quit)退出
Ø gdb+文件名
2、 操作
3、 l(list):列出代码清单
b(break) n:在第n行设置断点 disable n:禁用断点 delete n:删除第几个断点
b func:b+函数名,表在函数入口处设置断点
bt:查看函数堆栈
finish:退出函数
r(run) 执行
c(continue):继续运行
S :一步一步执行,进入函数
n:单条语句执行,不进入函数
display x:一直监察显示x的值
info b:查看断点信息
p i:显示变量i的当前值
Makefile
Ø 语法为:
目标:依赖
命令
Ø 步骤:
vi makefile
cmz:main.o func1.o
<Tab> gcc –o cmz main.o func1.o
main.o: main.c
<Tab> gcc –c –o main.o main.c
func1.o:func1.c
<Tab>gcc –c –o func1.o func1.c
clean:
rm –rf *.o(刷新)
最后退出vi编辑器,在命令行输make即可
Ø 注意:执行是写法的逆序,
写Tap的地方一定要用Tap(正确情况下目标是蓝色,依赖是黑色,命令是红色)
饿~~~