g ++:有没有办法在正在编译的代码中访问编译标志?

gex*_*ide 6 c++ gcc

是否有一种方法(例如,定义的常量)来访问编译器在编译的代码中运行的编译标志.

例如,我想要一个程序来编写用于编译它的标志.

int main(){
    std::cout << COMPILE_FLAGS << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

gcc/g ++是否存在这样的常量?甚至更好:是否有在gcc和clang中定义的常量?

我特别感兴趣的是检查优化级别和-march标志的值.那么,如果没有显示所有标志的常量,那么至少有哪些显示这些值?

Kai*_*zke 1

以下命令打印出所有预定义的宏:

g++ -dM -E - < /dev/null
Run Code Online (Sandbox Code Playgroud)

这适用于 gcc 和 g++。您可以检查一下自己 - 不幸的是,没有宏可以轻松访问完整的 gcc/g++ 命令行。

幸运的是,大多数-m...标志都会定义足够的预编译器宏。例如,-m64定义__x86_64-m32定义__code_model_32__。或者对于-march-march=core-avx2导致#define __core_avx2__ 1

只需在上面的命令行上添加您需要检查的选项,然后检查新宏定义的结果。