可靠的检查是使用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开始,Apple提供的Clang的CMAKE_< LANG> _COMPILER_ID值现在是AppleClang。要测试Apple提供的Clang和常规Clang,请使用以下if条件:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()