gcc GNU下的编译链接工具套组
源文件为 test.c 一个完整的编译链接生成test文件的过程如下
gcc -E -o test.i test.c # 预处理 .c->.i
gcc -S -o test.S test.i # 编译 .i->.S
gcc -c -o test test.S # 汇编链接 .S->.o
其他参数
-O[0|1|2|3] 优化等级
-L DIR 链接目录
-l FILE链接文件 不需要加空格
-w 禁止所有警告
-Wall 显示所有警告
makefile 自动化编译链接工具
make 自动检索makefile|Makefile|GNUmakefile文件来自动化编译链接
-f 指定makefile的文件名
变量格式
OBJ = FILENAME|OTHER?
特殊变量
$@ 生成的目标文件 $^ 被依赖文件 $< 第一个被依赖文件
.PHONY: 伪目标文件列表 防止文件名与标签冲突
一个例子
目录结构如下
代码如下
/* config.h */#define TEST 404
/* func.c */#include#include "config.h"void func() { printf("#define TEST is %d\n", TEST);}
/* test.c */#includeint main() { printf("hello world\n"); return 0;}
手动配置makefile文件
test: test.c func.c gcc -o test test.c func.cclean: rm test
利用特殊变量简写 并使用.PHONY防止文件名冲突
OBJ = test.c func.ctest: $(OBJ) gcc -o $@ $^.PHONY: cleanclean: rm test
执行make命令 自动编译链接生成可执行文件
执行make clean命令 删除编译链接产生的文件
当有多级子目录时可使用makefile的嵌套 例子如下
.PHONY: bothboth: a b ca: cd subdir1; makeb: cd subdir2; makec: cd subdir3; make
也可以下载一些自动化生成makefile的工具来生成makefile
最后生成的文件与下载安装的源码包文件非常相似
gdb 调试工具
编译时使用gcc -g 选项才能使用gdb调试
gdb调试交互式命令
l 显示源代码
r 运行
c 继续
b LINE 在指定行号设置断点
bt 显示调用栈
s 单歩执行[进入函数]
n 单歩执行[不进入函数]
p VAR 打印变量的值