Una verificación fiable es utilizar los 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 utiliza una envoltura compilador como ccache.
A partir de CMake 3.0.0, el valor de CMAKE_<LANG>_COMPILER_ID
para Clang proporcionado por Apple es ahora AppleClang
. Para poner a prueba tanto para el proporcionado por Apple Clang y el estruendo habitual utilizar los siguientes si la condición:
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
Véase también la AppleClang policy description.
Puede establecer el compilador configurando CMAKE_C_COMPILER y CMAKE_CXX_COMPILER en la ruta a clang o clang ++. +1 por clang – Zaffy
¿Por qué debería importarme? Clang es muy parecido a GCC, en términos de opciones de compilador aceptadas ... –
@BasileStarynkevitch Como admitíamos MSVC, necesitábamos detectar Clang, por lo que sabíamos si activar las opciones similares a GCC o las opciones similares a MSVC. Ha sido demasiado tiempo para que lo recuerde, pero también es posible que estuviéramos usando opciones que no son compatibles con Clang. – leedm777