meaning c++ c cmake clang

c++ - meaning - install clang ubuntu



En cmake, ¿cómo puedo probar si el compilador es Clang? (3)

El código fuente del motor OGRE 3D usa la siguiente check :

if (CMAKE_CXX_COMPILER MATCHES ".*clang") set(CMAKE_COMPILER_IS_CLANGXX 1) endif ()

Tenemos un conjunto de scripts de compilación CMake de plataforma cruzada , y apoyamos la construcción con MSVC y GCC .

Estamos probando Clang , pero no sé cómo probar si el compilador es Clang con nuestro script CMake.

¿Qué debo probar para ver si el compilador es Clang o no? Actualmente estamos usando CMAKE_COMPILER_IS_GNU<LANG> y CMAKE_COMPILER_IS_GNU<LANG> para probar MSVC y GCC, respectivamente.


Solo para evitar cualquier error de ortografía, estoy usando esto:

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 ()

Para hacer la caja de expresiones regulares insensible, intenté todo here sin éxito (no parece ser compatible con CMake).


Un control confiable es usar las CMAKE_<LANG>_COMPILER_ID . Por ejemplo, para verificar el compilador 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 un envoltorio de compilador como ccache .

A partir de CMake 3.0.0, el valor CMAKE_<LANG>_COMPILER_ID para Clang proporcionado por Apple ahora es AppleClang . Para probar tanto el Clang provisto por Apple como el Clang normal, use la siguiente condición:

if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # using regular Clang or AppleClang endif()

También vea la descripción de la política de AppleClang .