c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?

标签 c++ gcc

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

例如,我想要一个程序来写入编译时使用的标志。

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/

相关文章:

C++ ASIO : async_accept() handler throws exception when server destroys

c++ - 通过右值数据成员延长临时的生命周期适用于聚合,但不适用于构造函数,为什么?

c - 在编译期间将数据写入特定地址

c - MinGW32-GCC、LibCurl 链接专业版

c++ - 至强的 gcc 优化标志?

c++ - 选择 initializer_list 迭代器定义

c++ - <unordered_set> 中的错误?

gcc - CMake 库链接顺序

使用 PCL 时私有(private)函数的 C++ 继承

c++ - 将 C++ 共享库链接到 C 程序时如何避免错误