在cmake中,如何testing编译器是否是Clang?
我们有一套跨平台的CMake构build脚本 ,我们支持使用MSVC和GCC构build。
我们正在尝试Clang ,但我不知道如何testing编译器是否与我们的CMake脚本Clang。
我应该testing一下,看看编译器是否是Clang? 我们目前使用MSVC
和CMAKE_COMPILER_IS_GNU<LANG>
分别testingMSVC和GCC。
可靠的检查是使用CMAKE_<LANG>_COMPILER_ID
variables。 例如,要检查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中似乎不被支持)。