我想确保我正确理解 g++ 文档。
当通过 G++ 处理 C/C++ 程序时,我们通常会进行预处理、编译、汇编和链接。
根据您是构建代码的调试版本还是发布版本,您可以选择对最终产品应用不同的标志。
以标志
-O3
为例。该标志应该应用于什么阶段?我认为这应该在编译期间生成 .o 文件时应用。 (这在文档中的某个地方吗?)
如果是这样,如果想要生成程序的 2 个版本,一个用于发布,一个用于调试,则应单独生成 .o 作为 make 文件的一部分(这是正确的吗?)
一般来说,G++ 帮助非常广泛,如何找出给定标志应该应用于进程的哪一部分?
当我们谈论优化时,我们是在谈论目标代码吗?
以标志-O3为例。该标志应该应用于哪个阶段?
编译。
如果想要生成程序的 2 个版本,一个用于发布,一个用于调试,则应单独生成 .o 作为 make 文件的一部分
是的。
预处理也可能受到影响,例如通过定义诸如
NDEBUG
或 _GLIBCXX_DEBUG
之类的宏,但单独进行预处理并不常见:大多数 makefile 都会调用编译器将源文件直接转换为目标文件,因此编译器在以下位置执行预处理、编译和汇编:一步到位。
一般来说,G++ 帮助非常广泛,如何找出给定标志应该应用于进程的哪一部分?
RTFM,当然!
选项摘要列出了所有选项,并将它们分组为几个部分。
很明显,这些选项控制特定阶段:
还有目录搜索选项,其中头文件搜索路径由预处理器使用,库搜索路径由链接器使用。
通常所有其他选项控制编译,或应用于所有阶段(例如
-o
设置输出文件名)或指定
当我们谈论优化时,我们是在谈论目标代码吗?
是的。
GNU 链接器还有一个
-O
标志,请参阅 ld 手册,但目前仅在链接 ELF 共享库时有效,并且 GCC 不会使用它,除非您明确请求,例如通过-Wl,-O