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