我们有一套cross-platform CMake build scripts套,我们支持Visual C++和GCC的建筑.
我们正在试用Clang,但是我不知道如何测试编译器是否与我们的CMake脚本重合.
我应该测试什么来查看编译器是否发出叮当声?我们现在分别使用MSVC
和CMAKE_COMPILER_IS_GNU<LANG>
来测试Visual C++和GCC.
我们有一套cross-platform CMake build scripts套,我们支持Visual C++和GCC的建筑.
我们正在试用Clang,但是我不知道如何测试编译器是否与我们的CMake脚本重合.
我应该测试什么来查看编译器是否发出叮当声?我们现在分别使用MSVC
和CMAKE_COMPILER_IS_GNU<LANG>
来测试Visual C++和GCC.
可靠的判断方法是使用CMAKE_<LANG>_COMPILER_ID
个变量.例如,判断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,苹果提供的Clang的CMAKE_<LANG>_COMPILER_ID
值现在是AppleClang
.要测试苹果提供的叮当声和常规叮当声,请使用以下条件:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
也可以看到AppleClang policy description.
CMake 3.15增加了对clang-cl和常规clang前端的支持.您可以通过判断变量CMAKE_CXX_COMPILER_FRONTEND_VARIANT
来确定前端变量:
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
# using clang with clang-cl front end
elseif (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
# using clang with regular front end
endif()
endif()