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

如需要链接库文件 libmylib.so时,
g++ main.cpp -lmylib -o main.out

10. -include:编译时在不修改代码的前提下,包含对应的头文件

如: g++ -include /usr/myHeaderFiles/tmp.h

11. -g :g++ 编译生成带有调试文件的输出。

posted @   Jeffxue  阅读(70)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示