GCC - 包含编译标志的宏

Posted

技术标签:

【中文标题】GCC - 包含编译标志的宏【英文标题】:GCC - Macro containing compilation flags 【发布时间】:2017-11-20 15:36:50 【问题描述】:

GCC 中是否有包含用于编译程序的编译标志的宏?

我想要这样的东西:

printf("Compilation flags: %s", __FLAGS__);

以输出为例:

Compilation flags: -02 -g

【问题讨论】:

它是O2 而不是02 BTW... 嗯,当然。错字。 【参考方案1】:

简短回答:不。

稍微长一点的答案:即使有,您的代码也会变得不可移植。需要这种功能的项目让构建系统来做,例如通过将所有标志放在make 中的CFLAGS 变量中并有一个规则创建一个config.h 将所有这些标志放在#define 那里。

【讨论】:

这不太正确。可以通过宏找到选项的子集:gcc.gnu.org/onlinedocs/gcc-3.3.5/cpp/… 例如__OPTIMIZE__ __OPTIMIZE_SIZE__ __NO_INLINE__ @EugeneSh。我不知道您在哪里看到了“子集”?这些只是定义或未定义,它们不包含任何命令行标志。 是的,但是如果您对某些特定选项感兴趣,您可以从这里获得它们。不确定这是 OP 感兴趣的内容... 对不起,但我不买那个;)只有一个标志告诉你是否有任何优化是活跃的;) 我同意菲利克斯的观点。我已经看到标志为__OPTIMIZE__,但它没有给我任何关于优化级别的信息。我考虑过 Makefile,但该项目是由 IDE 管理的,所以有点难。我想我会手动放。【参考方案2】:

这可能不会有太大帮助,但 GCC 有一个选项 -fverbose-asm (https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html) 会将生成的程序集中使用的命令行选项转储为注释。

当然,这仅在您打算读取生成的程序集而不是直接组装它时才有用

【讨论】:

以上是关于GCC - 包含编译标志的宏的主要内容,如果未能解决你的问题,请参考以下文章

如何确定给定编译标志的 GCC 的最小/最大版本?

是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?

GCC - 仅在特定功能上启用编译器标志

在 GCC 中编译时使用 `-Wextra` 标志的缺点

gcc 中是不是有一个编译标志来克服“错误:无效的存储类”?

在 Windows 上默认启用 GCC 编译器 C++11 标志