常用gcc编译选项
选项 | 作用 |
---|---|
-E | 生成预处理文件 |
-S | 生成汇编文件 |
-c | 生成可目标文件 |
-o | 指定生成文件的文件名 |
-On | 指定代码优化等级 |
-g | 用于gdb调试、objdump |
-Wall | 显示代码中的所有warning行为 |
-w | 禁止显示代码中的warning行为 |
-Werror | 将代码中的warning行为视为error |
-D | 设置预定义宏 |
---|---|
-l | 链接(link)指定的函数库 |
-std=c++11 | 指定编译代码的C++标准为C++11 |
-E
、-S
、-c
三个选项直接对应着编译的前三个基本阶段
编译预处理(.i)
将源文件main.cc
经过预处理后,生成文件。预处理所得文件main.i
g++ -E main.cc -o main.i
编译、优化程序(.s)
将main.i
文件翻译成一个汇编文件main.s
g++ -S main.cc -o main.s
汇编程序(.o)
运行汇编器,将main.s
翻译成一个可重定位目标文件main.o
g++ -c main.s -o main.o
链接程序(.elf)
运行链接器,将main.o
中使用到的目标文件组合起来,并创建一个可执行的文件main
.
由于main.cc
代码没有额外的依赖,因此可以直接输出main
文件
g++ main.o -o main
实际上,一步就能够完成上面所有的操作r
g++ main.cc -o main