0

我想确保我正确理解了 g++ 文档。

通过 G++ 处理 C/C++ 程序时,我们通常会进行预处理、编译、汇编和链接。

根据您是构建代码的调试版本还是发布版本,您可以选择将不同的标志应用于最终产品。

以国旗-O3为例。这个标志应该应用到哪个阶段?我认为这应该在编译期间生成 .o 文件时应用。(这是在某个地方的文档中吗?

如果是这样,如果想要生成 2 个版本的程序,一个用于发布,一个用于调试,.o 应该作为 make 文件的一部分单独生成(这是正确的吗?)

一般来说,G++ 的帮助非常广泛,如何找出给定标志应该应用于进程的哪个部分?

当我们谈论优化时,我们是在谈论目标代码吗?

4

1 回答 1

0

以标志 -O3 为例。这个标志应该应用到哪个阶段?

汇编。

如果想要生成 2 个版本的程序,一个用于发布,一个用于调试,.o 应该作为 make 文件的一部分单独生成

是的。

预处理也可能会受到影响,例如通过宏的定义,例如NDEBUGor_GLIBCXX_DEBUG但无论如何单独进行预处理并不常见:大多数 makefile 调用编译器将源文件直接转换为目标文件,因此编译器执行预处理、编译和汇编一步。

一般来说,G++ 的帮助非常广泛,如何找出给定标志应该应用于进程的哪个部分?

RTFM,当然!

选项摘要列出了所有选项,并将它们分组为多个部分。

很明显,这些选项控制特定阶段:

控制预处理器的选项 将选项
传递给汇编器
链接选项

还有用于目录搜索的选项,其中头文件搜索路径由预处理器使用,库搜索路径由链接器使用。

通常所有其他选项控制编译,或应用于所有阶段(例如-o设置输出文件名)或指定

当我们谈论优化时,我们是在谈论目标代码吗?

是的。

GNU 链接器还有一个-O标志,请参阅ld 手册,但目前仅在链接 ELF 共享库时才有效,除非您明确请求,否则 GCC 不会使用它,例如通过-Wl,-O

于 2012-08-14T07:44:43.007 回答