g++ 常用参数总结
程序编译过程
程序的构建主要有4个阶段:预处理 ---> 编译 ---> 汇编 ---> 链接

1. 预处理: -E
g++ -E main.cpp -o main.ii (参数 -E 表示只进行预处理)
这一步表示将源代码文件进行预处理,生成 .ii文件(对.c文件生成 .i),预处理的结果,对源代码中以 "#" 开始的预编译指令进行处理,如:
- 扩展所有的宏定义,并将 "#define" 删除。
- 处理所有的条件编译指令,如 "#if, #ifdef, #endif"等等。
- 处理 "#include" 指令,将对应的头文件插入到对应的位置。
- 删除所有注释内容。
- 添加行号和文件标识。
- 保留所有的 "#pragma" 编译指令。
2. 编译:-S
g++ -S main.ii -o main.s(参数 -S 表示进行编译,生成汇编文件)
如果 -S 后面的文件为 .cpp 文件,则该命令会先在背后调用预处理程序,然后再将预处理生成的.ii文件生成汇编文件.s,将预处理和编译合并起来,直接将源代码生成汇编代码:
g++ -S main.cpp -o main.s
3. 汇编:-c
g++ -c main.s -o main.o (参数 -c 将汇编代码转变成机器可以执行的指令目标文件)
如果参数 -c 后面的文件为 .cpp,则该指令会依次调用 预处理、 编译 来生成汇编代码、然后是进行 汇编 来生成机器可以执行的指令文件.o。 所以 -c 参数指令是对 预处理、编译、汇编的包装,具体执行哪些过程,要看该参数后的文件。将 预处理、编译、汇编合并起来,直接将源代码生成 目标文件:
g++ -c main.cpp -o main.o
4. 链接
g++ main.o -o main.out 将目标文件链接成可执行程序 .out 文件(链接器程序为 ld)。
g++ 命令是对编译整个流程的包装,根据后面的源文件类型来决定调用哪些程序。如:
g++ main.cpp -o main.out 分别调用了 预处理、编译、汇编、链接 来将源文件生成可执行程序
g++ 的常用参数
5. -D 定义对应的宏
如 g++ main.cpp -DRELEASE -o main.out 中会定义宏 RELEASE
6. -I 用于编译时指定头文件的搜索路径
代码中使用了一些需要指定路径的头文件,如 #include "xxx.h"需要在编译时指定其查找路径,否则编译时将报错无法找到对应的头文件。如:
g++ main.cpp -I"myProject/include" -o main.out
包含多个头文件路径需要依次使用 -I 来进行添加
7. -std 用来指示C++语言的标准版本
如使用 C++11标准进行编译: g++ main.cpp -o main.out -std=c++11
8. -L:链接时需要查找库文件的路径
如链接时用到某个库,它位于 "/usr/myLib/dir/Libs"中,则:
g++ main.cpp -L"/usr/myLib/dir/Libs" -o main.out
9. -l:用于链接库文件(link 的首字母)
如需要链接库文件 libmylib.so时,
g++ main.cpp -lmylib -o main.out
10. -include:编译时在不修改代码的前提下,包含对应的头文件
如: g++ -include /usr/myHeaderFiles/tmp.h
浙公网安备 33010602011771号