在 C 语言的编译过程中,不同阶段会生成不同后缀的文件,同时可以使用不同的编译选项来控制编译流程。以下是它们的含义及全称:
⸻
- 后缀名(文件类型)
后缀 文件类型 说明
.c C 源代码文件 C 语言的原始源代码文件
.i 预处理文件(Preprocessed file) 经过预处理器处理后的 C 代码(展开 #include 和 #define 等)
.s 汇编文件(Assembly file) 编译器将 C 代码转换为的汇编语言代码
.o 目标文件(Object file) 汇编器将汇编代码转换成的机器码文件,尚未链接
⸻
- 编译选项(GCC 编译选项)
选项 全称 作用
-E Preprocessing only 只进行预处理,生成 .i 文件,不进行编译
-S Compile only 只编译,不汇编,生成 .s 汇编文件
-c Compile and assemble 编译+汇编,但不链接,生成 .o 目标文件
-o Output file 指定输出文件的名称
⸻
- 结合示例命令
假设有 C 源文件 main.c,可以通过以下命令逐步完成编译:
gcc -E main.c -o main.i # 只进行预处理,生成 main.i
gcc -S main.i -o main.s # 只进行编译(不汇编),生成 main.s
gcc -c main.s -o main.o # 进行编译+汇编(不链接),生成 main.o
gcc main.o -o main # 进行链接,生成可执行文件 main
通常,我们可以直接使用:
gcc main.c -o main
GCC 会自动完成所有步骤,包括预处理、编译、汇编和链接,生成最终的可执行文件。
这样,.o、.s、.i 及 -E、-S、-c 这些选项的作用就清楚了! 🚀