有没有一种方法(例如,定义的常量)来访问正在编译的代码中运行编译器的编译标志。
例如,我想要一个程序来写入编译时使用的标志。
int main(){
std::cout << COMPILE_FLAGS << std::endl;
}
gcc/g++ 是否存在这样的常量?或者更好:是否有在 gcc 和 clang 中都定义的常量?
我对检查优化级别和 -march
标志的值特别感兴趣。那么,如果没有显示所有标志的常量,是否至少有显示这些值的常量?
最佳答案
以下命令打印出所有预定义的宏:
g++ -dM -E - < /dev/null
这适用于 gcc 和 g++。您可以自行检查 - 不幸的是,没有宏可让您轻松访问完整的 gcc/g++ 命令行。
幸运的是,大多数 -m... 标志都会导致定义足够的预编译器宏。例如,-m64 定义 __x86_64 和 -m32 定义 __code_model_32__ 。或者对于 -march:-march=core-avx2 结果为 #define __core_avx2__ 1。
只需在上面的命令行中添加您需要检查的选项,并检查新宏定义的结果。
关于c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447753/