我正在尝试检测编译我的源代码使用的编译器。我可以轻松地找到预定义的宏来检查MSVC或GCC(例如,请参见https://github.com/cpredef/predef),但我无法找到任何用于检查clang的宏。
是否有人知道clang是否定义了像__CLANG__
这样的宏,以便知道当前编译我的代码是什么?
我正在尝试检测编译我的源代码使用的编译器。我可以轻松地找到预定义的宏来检查MSVC或GCC(例如,请参见https://github.com/cpredef/predef),但我无法找到任何用于检查clang的宏。
是否有人知道clang是否定义了像__CLANG__
这样的宏,以便知道当前编译我的代码是什么?
要获取编译器使用的所有预定义宏的列表,请使用以下代码:
clang -dM -E -x c /dev/null
你可以用同样的方法来对gcc进行操作。
使用 strings
和 grep
找到了答案:
$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
这个问题已经有多年的答案了,但让我补充一下(供将来参考),在 Windows 中如何完成:
echo | clang -dM -E -
与GCC相同:
echo | gcc -dM -E -
请注意:最后的短横线-
实际上非常重要!(否则两个编译器都会出现error: no input files
)
/dev/null
的是NUL:
。 - legalize