在cmake中,如何testing编译器是否是Clang?

我们有一套跨平台的CMake构build脚本 ,我们支持使用MSVC和GCC构build。

我们正在尝试Clang ,但我不知道如何testing编译器是否与我们的CMake脚本Clang。

我应该testing一下,看看编译器是否是Clang? 我们目前使用MSVCCMAKE_COMPILER_IS_GNU<LANG>分别testingMSVC和GCC。

可靠的检查是使用CMAKE_<LANG>_COMPILER_IDvariables。 例如,要检查C ++编译器:

 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # using Clang elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # using GCC elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") # using Intel C++ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # using Visual Studio C++ endif() 

如果使用像ccache这样的编译器包装,这些也可以正常工作。

从CMake 3.0.0开始,Apple提供的Clang的CMAKE_<LANG>_COMPILER_ID值现在是AppleClang 。 要testingApple提供的Clang和常规Clang,使用以下条件:

 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # using regular Clang or AppleClang endif() 

另请参阅AppleClang政策描述 。

OGRE 3D引擎源代码使用以下检查 :

 if (CMAKE_CXX_COMPILER MATCHES ".*clang") set(CMAKE_COMPILER_IS_CLANGXX 1) endif () 

只是为了避免任何错误的问题,我正在使用这个:

 if (CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]") #Case insensitive match set(IS_CLANG_BUILD true) else () set(IS_CLANG_BUILD false) endif () 

为了使正则expression式不区分大小写,我在这里尝试了一切都没有成功(在CMake中似乎不被支持)。