Je veux savoir quelle version de clang Apple installée dans mon macbook, à voir avec les fonctionnalités de c ++ 11 et/ou de c ++ 14 est disponible. J'ai tapé cette commande:
clang --version
//----response
Apple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-Apple-darwin15.0.0
Thread model: posix
Mais je ne suis pas capable de comprendre ce que (clang-700.1.76)
signifier. Comment puis-je convertir ce code en version clang?
C’est le site où vous pouvez vérifier les fonctionnalités c ++ disponibles dans la version Clang http://clang.llvm.org/cxx_status.html
Le numéro de version (compilateur) du compilateur est généralement inutile, car vous devez également déterminer si votre code est compilé avec libstdc++
ou avec libc++
(ou toute autre bibliothèque standard) - et quelle version de celles-ci.
Si vous souhaitez tester les fonctionnalités de langue ou de bibliothèque, il est préférable de vérifier d'autres valeurs définies, par exemple, __cplusplus
, __cpp_constexpr
, __cpp_variadic_templates
, etc. Ce n'est pas parfait, mais cela semble mieux fonctionner (si vous voulez la portabilité) selon mon expérience et le support de tous les compilateurs principaux s'améliore.
Chaque version standard C++ définit une valeur pour __cplusplus
, certains compilateurs utilisent des valeurs intermédiaires pour dire "nous avons déjà commencé avec C++ 14, mais nous n'y sommes pas encore". Utilisation >=
pour tester en cas de besoin.
Les autres macros de test de fonctionnalités sont similaires, vous pouvez trouver la version actuelle à N444 . Tous les compilateurs n’implémentent pas N4440, cependant.
Voici la meilleure liste que j'ai trouvée qui corrèle les versions d'Apple clang avec les versions de LLVM:
https://trac.macports.org/wiki/XcodeVersionInfo
Les versions précédentes disaient à quelle version de LLVM elles correspondaient, mais à partir de la version 7.0, Apple a décidé de ne plus le faire. Elles définissent même le __clang_version__
et les macros du préprocesseur associées pour indiquer le numéro de version Apple, pas la version de LLVM. Ils sont donc également inutiles.
Malheureusement, il semble que la seule façon de voir si vous avez une fonctionnalité est de l'essayer et de vérifier si cela fonctionne. par exemple. 7.0.2 n’a toujours pas OpenMP activé par défaut (bien qu’il s’agisse de enable -able ), je suppose donc qu’il reste 3.6, pas encore 3.7.
La page Xcode de Wikipedia contient une carte de Apple vers les versions de LLVM (au moins jusqu'à AppleClang 800.0.42.1). La colonne LLVM contient la version open source LLVM/Clang, à partir de laquelle vous pouvez rechercher une fonctionnalité de langage dans le tableau de cppreference indiquant si le compilateur prend en charge les fonctionnalités de langage .
Comme indiqué par pkolbus
, vous pouvez regarder le /src/CMakeLists.txt
pour deviner la version de Clang correspondante. Par exemple, Apple Clang 800.0.38 et 800.0.42.1 semblent tous deux basés sur Clang 3.9.0 selon
if(NOT DEFINED LLVM_VERSION_MAJOR)
set(LLVM_VERSION_MAJOR 3)
endif()
if(NOT DEFINED LLVM_VERSION_MINOR)
set(LLVM_VERSION_MINOR 9)
endif()
if(NOT DEFINED LLVM_VERSION_PATCH)
set(LLVM_VERSION_PATCH 0)
endif()
if(NOT DEFINED LLVM_VERSION_SUFFIX)
set(LLVM_VERSION_SUFFIX svn)
endif()
On peut essayer de compiler certains fichiers avec l'option - verbose.
Par exemple: c ++ --verbose -c test1.cpp
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-Apple-darwin14.5.0
Thread model: posix
"/Library/Developer/CommandLineTools/usr/bin/clang" -cc1 -triple x86_64-Apple-macosx10.10.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name test1.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 253.9 -v -dwarf-column-info -coverage-file /Users/az/ctest/test1.cpp -resource-dir /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2 -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /Users/az/ctest -ferror-limit 19 -fmessage-length 130 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.10.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o test1.o -x c++ test1.cpp
clang -cc1 version 7.0.2 based upon LLVM 3.7.0svn default target x86_64-Apple-darwin14.5.0
Cela affiche la version svn de LLVM (3.7.0 dans notre exemple)
Si vous utilisez la commande strings sur le compilateur, vous pouvez obtenir la version de LLVM.
Par exemple, si vous avez la version de clang qui s'identifie comme Apple LLVM version 7.0.2 (clang-700.1.81), la sortie des chaînes aura cette valeur:
LLVM 3.7.0svn
Cela ne semble pas fonctionner avec la version Apple LLVM version 7.3.0 (clang-703.0.29)
Jetez un oeil à https://en.wikipedia.org/wiki/Xcode#Toolchain_versions
------------------------------------------------------------------------------------ Xcode cctools[93] ld64[94] LLVM[85] Clang version string[95] 8.3.3 898 278.4 3.9.0svn[85] 8.1.0 (clang-802.0.42)[80] 9.0 900 302.3 4.0.0?[86] 9.0.0 (clang-900.0.37)[80] 9.1 900 302.3.1 4.0.0?[87] 9.0.0 (clang-900.0.38)[80] 9.2 900 305 4.0.0?[88] 9.0.0 (clang-900.0.39.2)[80] 9.3 906 351.8 5.0.2?[89] 9.1.0 (clang-902.0.39.1)[80] 9.3.1 906 351.8 5.0.2?[89] 9.1.0 (clang-902.0.39.1)[80] 9.4 906 351.8 5.0.2?[90] 9.1.0 (clang-902.0.39.2)[80] 9.4.1 906 351.8 5.0.2?[90] 9.1.0 (clang-902.0.39.2)[80] 10.0 921.0.1 409.12 6.0.1?[91] 10.0.0 (clang-1000.11.45.2)[80] 10.1 921.0.1 409.12 6.0.1?[92] 10.0.0 (clang-1000.11.45.5)[80]
Par exemple, Apple CLang 10.x est basé sur LLVM 6.0.1.
Si vous avez installé clion, dans chaîne de préférences, vous pouvez voir "débogueur" sous la forme LLDB 7.0.1 fourni.
Je crois que c'est la version actuelle Apple clang. (Par exemple, Apple LLVM version 10.0.1)