Una verificación confiable es usar el CMAKE_<LANG>_COMPILER_ID
variables Por ejemplo, para comprobar el compilador de 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()
Estos también funcionan correctamente si se usa un contenedor de compilador como ccache.
A partir de CMake 3.0.0, el CMAKE_<LANG>_COMPILER_ID
el valor de Clang proporcionado por Apple ahora es AppleClang
. Para comprobar tanto el Clang proporcionado por Apple como el Clang normal, utilice la siguiente condición if:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
Consulte también la descripción de la política de AppleClang.
CMake 3.15 ha agregado soporte tanto para clang-cl como para el front-end clang regular. Puede determinar la variante de front-end inspeccionando la variable 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()
El código fuente del motor OGRE 3D utiliza la siguiente comprobación:
if (CMAKE_CXX_COMPILER MATCHES ".*clang")
set(CMAKE_COMPILER_IS_CLANGXX 1)
endif ()