Car*_*rez 62 c llvm clang c-preprocessor
我认为这个问题很清楚.我正在尝试编写一个编译器检测头,以便能够在应用程序中包含有关使用哪个编译器和哪个版本的信息.
这是我正在使用的代码的一部分:
/* GNU C Compiler Detection */
#elif defined __GNUC__
    #ifdef __MINGW32__
        #define COMPILER "MinGW GCC %d.%d.%d"
    #else
        #define COMPILER "GCC %d.%d.%d"
    #endif
    #define COMP_VERSION __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
#endif
哪个可以这样使用:
printf("  Compiled using " COMPILER "\n", COMP_VERSION);
有没有办法检测LLVM及其版本?和CLANG?
Dan*_*bar 73
在__llvm__和__clang__宏,分别检查了LLVM编译器(LLVM-GCC或铛)或铛的正式方法.
__has_feature并且__has_builtin是使用clang时检查可选编译器功能的推荐方法,这里记录了它们.
请注意,您可以使用以下命令找到gcc,llvm-gcc和clang的内置编译器宏列表:
echo | clang -dM -E -
这会预处理一个空字符串并吐出编译器定义的所有宏.
Wal*_*ter 39
我在这里找不到答案,只能找到答案的链接,所以为了完整起见,这里是答案:
__clang__             // set to 1 if compiler is clang
__clang_major__       // integer: major marketing version number of clang
__clang_minor__       // integer: minor marketing version number of clang
__clang_patchlevel__  // integer: marketing patch level of clang
__clang_version__     // string: full version number
我目前得到:
__clang__=1
__clang_major__=3
__clang_minor__=2
__clang_patchlevel__=0
__clang_version__="3.2 (tags/RELEASE_32/final)"
Chr*_*oph 10
  // Compiler version introspection macros.
  DefineBuiltinMacro(Buf, "__llvm__=1");   // LLVM Backend
  DefineBuiltinMacro(Buf, "__clang__=1");  // Clang Frontend
  // Currently claim to be compatible with GCC 4.2.1-5621.
  DefineBuiltinMacro(Buf, "__GNUC_MINOR__=2");
  DefineBuiltinMacro(Buf, "__GNUC_PATCHLEVEL__=1");
  DefineBuiltinMacro(Buf, "__GNUC__=4");
  DefineBuiltinMacro(Buf, "__GXX_ABI_VERSION=1002");
  DefineBuiltinMacro(Buf, "__VERSION__=\"4.2.1 Compatible Clang Compiler\"");
我没有找到任何方法来获得llvm和clang本身的版本,但是..