gcc编译过程总结
第一步: 对源文件进行预处理, 需要使用的gcc参数为 -E
# 1. 预处理, -o 指定生成的文件名
$ gcc -E test.c -o test.i
第二步: 编译预处理之后的文件, 需要使用的gcc参数为 -S
# 2. 编译, 得到汇编文件
$ gcc -S test.i -o test.s
第三步: 对得到的汇编文件进行汇编, 需要使用的gcc参数为-c
# 3. 汇编
$ gcc -c test.s -o test.o
第四步: 将得到的二进制文件和标准库进制链接, 得到可执行的二进制文件, 不需要任何参数
# 4. 链接
$ gcc test.o -o test
注意: 在使用gcc编译程序的时候指定-o或-c会自动执行几个步骤
gcc常用参数-E 预处理指定的源文件,不进行编译
-S 编译指定的源文件,但是不进行汇编 -c 编译、汇编指定的源文件,但是不进行链接 -o [file1] [file2] / [file2] -o [file1] 将文件 file2 编译成文件 file1 -I directory (大写的i) 指定 include 包含文件的搜索目录 -g 在编译的时候,生成调试信息,该程序可以被调试器调试 -D 在程序编译的时候,指定一个宏 -w 不生成任何警告信息, 不建议使用, 有些时候警告就是错误 -Wall 生成所有警告信息 -On n的取值范围:0~3。编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 -l 在程序编译的时候,指定使用的库 -L 指定编译的时候,搜索的库的路径。 -fPIC/fpic 生成与位置无
-D参数实例
int main()
{
int a = 10;
#ifdef DEBUG
printf("这是调试代码\n");
#endif
printf("这是发布代码\n");
}
# 在编译命令中定义这个DEBUG 宏,
$ gcc test.c -o app -D DEBUG
执行后的输出结果:这是调试代码