Une vérification fiable consiste à utiliser le CMAKE_<LANG>_COMPILER_ID
variables. Par exemple, pour vérifier le compilateur 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()
Ceux-ci fonctionnent également correctement si un wrapper de compilateur comme ccache est utilisé.
À partir de CMake 3.0.0, l'option CMAKE_<LANG>_COMPILER_ID
pour le Clang fourni par Apple est maintenant AppleClang
. Pour tester à la fois le Clang fourni par Apple et le Clang normal, utilisez la condition if suivante :
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
Voir également le Description de la politique d'AppleClang .
CMake 3.15 a ajouté un support pour les deux clang-club et le frontal clang normal. Vous pouvez déterminer la variante du front-end en inspectant 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()
1 votes
Vous pouvez définir le compilateur en définissant CMAKE_C_COMPILER et CMAKE_CXX_COMPILER comme chemin vers clang ou clang++. +1 pour clang.
0 votes
Pourquoi devriez-vous vous en soucier ? Clang est très proche de GCC, en termes d'options de compilation acceptées ...
2 votes
@BasileStarynkevitch Depuis que nous supportons MSVC, nous avons besoin de détecter Clang pour savoir si nous devons activer les options de type GCC ou celles de type MSVC. Cela fait trop longtemps pour que je m'en souvienne, mais il est également possible que nous utilisions des options non supportées par Clang.
2 votes
@BasileStarynkevitch - Clang prétend être les deux.
__GNUC__
et_MSC_VER
mais il ne peut pas consommer les mêmes programmes que les deux compilateurs. Détecter LLVM Clang et Apple Clang est crucial pour s'assurer que le code se compile et s'exécute comme prévu. Je suis tellement fatigué de traiter avec les BS de Clang que nous avons juste casser la compilation sous Windows . Nous avons adopté la politique de laisser les utilisateurs se plaindre à LLVM pour que les développeurs de Clang changent leur comportement. Voir aussi Comment dire à Clang d'arrêter de se faire passer pour d'autres compilateurs ?