我正在尝试检测用于编译源代码的编译器。我可以很容易地找到预定义的宏来检查MSVC或GCC(例如,参见http://predef.sourceforge.net/),但我找不到任何宏来检查clang。
有人知道clang是否定义了像__CLANG__
这样的宏,以便知道当前正在编译我的代码的是什么?
答案 0 :(得分:112)
要获取编译器使用的所有预定义宏的列表,请使用:
clang -dM -E -x c /dev/null
你可以为gcc做同样的事。
答案 1 :(得分:74)
使用strings
+ grep
找到答案:
$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
答案 2 :(得分:37)
这个问题已经回答了多年,但是让我在 Windows 中添加(以供将来参考)它是如何完成的:
echo | clang -dM -E -
与GCC相同:
echo | gcc -dM -E -
请注意:最后一个短划线-
实际上非常重要! (否则,两个编译器都会获得error: no input files
)