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
Run Code Online (Sandbox Code Playgroud)
哪个可以这样使用:
printf(" Compiled using " COMPILER "\n", COMP_VERSION);
Run Code Online (Sandbox Code Playgroud)
有没有办法检测LLVM及其版本?和CLANG?
Dan*_*bar 73
在__llvm__
和__clang__
宏,分别检查了LLVM编译器(LLVM-GCC或铛)或铛的正式方法.
__has_feature
并且__has_builtin
是使用clang时检查可选编译器功能的推荐方法,这里记录了它们.
请注意,您可以使用以下命令找到gcc,llvm-gcc和clang的内置编译器宏列表:
echo | clang -dM -E -
Run Code Online (Sandbox Code Playgroud)
这会预处理一个空字符串并吐出编译器定义的所有宏.
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
Run Code Online (Sandbox Code Playgroud)
我目前得到:
__clang__=1
__clang_major__=3
__clang_minor__=2
__clang_patchlevel__=0
__clang_version__="3.2 (tags/RELEASE_32/final)"
Run Code Online (Sandbox Code Playgroud)
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\"");
Run Code Online (Sandbox Code Playgroud)
我没有找到任何方法来获得llvm和clang本身的版本,但是..
归档时间: |
|
查看次数: |
34372 次 |
最近记录: |