gcc编译过程总结

发布时间 2023-10-10 17:48:42作者: ddup123

第一步: 对源文件进行预处理, 需要使用的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

执行后的输出结果:这是调试代码