web-dev-qa-db-ger.com

Holen Sie sich Apple clang-Version und entsprechende Upstream-LLVM-Version

Ich möchte verstehen, welche Version von clang Apple auf meinem MacBook installiert ist, um zu sehen, welche Funktionen in C++ 11 und/oder C++ 14 verfügbar sind. Ich habe folgenden Befehl eingegeben:

clang --version

//----response
Apple LLVM version 7.0.0 (clang-700.1.76)     
Target: x86_64-Apple-darwin15.0.0    
Thread model: posix

Aber ich kann nicht verstehen, was (clang-700.1.76) bedeuten. Wie kann ich diesen Code in eine Clang-Version konvertieren?

Auf dieser Site können Sie die in der Clang-Version verfügbaren C++ - Funktionen überprüfen http://clang.llvm.org/cxx_status.html

58
user72708

Die (Apple-) Versionsnummer des Compilers ist meistens unbrauchbar, da Sie auch überlegen müssen, ob Ihr Code mit libstdc++ Oder mit libc++ (Oder einer anderen Standardbibliothek) kompiliert wird - und welche Version von diesen.

Wenn Sie auf Sprach- oder Bibliotheksfunktionen testen möchten, ist es besser, andere definierte Werte zu überprüfen, z. B. __cplusplus, __cpp_constexpr, __cpp_variadic_templates Usw. Es ist nicht perfekt, aber es scheint nach meiner Erfahrung besser zu funktionieren (wenn Sie Portabilität wollen) und die Unterstützung von allen großen Compilern verbessert sich.

Jede C++ - Standardversion definiert einen Wert für __cplusplus. Einige Compiler verwenden Zwischenwerte, um zu sagen, dass wir bereits mit C++ 14 begonnen haben, aber noch nicht da sind. Verwenden Sie >=, Um bei Bedarf zu testen.

Die anderen Funktionstestmakros sind ähnlich. Die aktuelle Version finden Sie unter N444 . Allerdings implementieren nicht alle Compiler N4440.

0
Daniel Frey

Hier ist die beste Auflistung, die ich gefunden habe und die Apples Clang-Versionen mit den LLVM-Versionen korreliert:

https://trac.macports.org/wiki/XcodeVersionInfo

Frühere Versionen gaben an, zu welcher LLVM-Version sie gehörten, aber ab 7.0 entschied sich Apple), dies nicht mehr zu tun. Sie definieren sogar die __clang_version__ und zugehörige Präprozessor-Makros zur Angabe der Apple Versionsnummer, nicht der LLVM-Version. Daher sind sie auch hierfür unbrauchbar.

Leider sieht es so aus, als ob die einzige Möglichkeit, um festzustellen, ob eine Funktion vorhanden ist, darin besteht, sie zu testen und zu überprüfen, ob sie funktioniert. z.B. In 7.0.2 ist OpenMP noch nicht standardmäßig aktiviert (obwohl es enable-able ist), also ist es wohl noch 3.6, noch nicht 3.7.

20
Mike Jarvis

Die Xcode-Seite von Wikipedia enthält eine Zuordnung von Apple zu LLVM-Versionen (bis mindestens AppleClang 800.0.42.1) Die LLVM-Spalte enthält die Open-Source-Version von LLVM/Clang. Hier können Sie eine Sprachfunktion in der Tabelle der Compiler-Unterstützung für Sprachfunktionen von cppreference nachschlagen .

16
John McFarlane

Wie durch pkolbus angedeutet, können Sie das /src/CMakeLists.txt, um die entsprechende Clang-Version zu erraten. Zum Beispiel scheinen Apple Clang 800.0.38 und 800.0.42.1 beide auf Clang 3.9.0 zu basieren

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()
10
Franklin Yu

Man kann versuchen, compile eine Datei mit -- verbose Option zu erstellen.

Zum Beispiel: 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

Es druckt LLVM svn version (3.7.0 in unserem Beispiel)

3
user8308676

Wenn Sie den Befehl strings im Compiler verwenden, erhalten Sie möglicherweise die LLVM-Version.

Wenn Sie beispielsweise die Clang-Version haben, die sich als Apple LLVM-Version 7.0.2 (clang-700.1.81) identifiziert, hat die Ausgabe von Zeichenfolgen dieser Wert:

LLVM 3.7.0svn

Dies scheint nicht zu funktionieren mit Version Apple LLVM Version 7.3.0 (clang-703.0.29)

1
user2956983

Schauen Sie sich https://en.wikipedia.org/wiki/Xcode#Toolchain_versions an

------------------------------------------------------------------------------------ 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]

Zum Beispiel ist Apple CLang 10.x LLVM 6.0.1-basiert.

1

Wenn Sie clion installiert haben, sehen Sie in Präferenz-Toolchains möglicherweise 'Debugger' als gebündelte LLDB 7.0.1.

Ich glaube das ist die aktuelle Apple clang Version. (ZB Apple LLVM Version 10.0.1)

0
user11275640