117

我正在尝试检测用于编译我的源代码的编译器。我可以轻松找到预定义的宏来检查 MSVC 或 GCC(例如,参见http://predef.sourceforge.net/),但我找不到任何宏来检查 clang。

有人知道 clang 是否定义了一个宏__CLANG__,以便了解当前正在编译我的代码吗?

4

3 回答 3

128

要获取编译器使用的所有预定义宏的列表,请使用以下命令:

clang -dM -E -x c /dev/null

你可以对 gcc 做同样的事情。

于 2011-04-29T04:00:18.400 回答
83

strings使用+找到答案grep

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
于 2010-04-17T13:23:24.233 回答
44

这个问题已经回答了多年,但让我补充一下(供将来参考)它是如何在Windows中完成的:

echo | clang -dM -E -

与 GCC 相同:

echo | gcc -dM -E -

请注意:最后一个破折号-实际上很重要!(否则你会得到error: no input files两个编译器)

于 2012-07-27T10:37:21.970 回答