-o 代表 output,即输出可执行文件。如果不指定输出文件,则默认生成a.out
gcc main.c -o main
预处理
1. 去注释 2. 头文件展开 3.条件编译4.宏替换
-E 可以理解为expand即展开,展开即可联想为预处理,因为预处理的操作就是展开头文件,宏定义等。
.i 预处理处理后的文件,i可以理解为 “intermediate”(中间的),预处理后生成中间文件。
gcc -E main.c -o main.i
编译
编译就是生成汇编,将代码转化为汇编语言。
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
-S 可以理解为Assembly 即编译,.s后缀也一样
gcc -S main.i -o main.s
汇编
将汇编代码生成二进制的机器码
-c 可以理解为compile编译,只进行编译过程而不进行链接。注意-c是小写,其他两个均为大写。
.o object为二进制目标文件
gcc -c main.s -o main.o
链接
链接的过程就是找到依赖的库文件(动态和静态),将目标文件链接为可执行程序
-l link 链接
gcc [目标文件] -o [可执行程序] -l[动态库名]
如果没有动态库则如下:
gcc main.o -o main