Wie finde ich die aktuelle Clang-Version auf dem Mac?

Lesezeit: 9 Minuten

Benutzer-Avatar
Einsamer Lernender

Hinweis: Keine der unter Get Apple clang version und entsprechende Upstream-LLVM-Version bereitgestellten Antworten scheint mehr zu funktionieren.

Die Downloadseite unter http://releases.llvm.org/download.html und der Wikipedia-Artikel unter https://en.wikipedia.org/wiki/Clang scheint anzuzeigen, dass die neueste Clang-Version 6.0.0 ist.

Aber auf meiner macOS High Sierra Version 10.13.3 sehe ich diese Ausgabe:

$ clang --version
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ which clang
/usr/bin/clang

Dies scheint nicht richtig zu sein. Warum ist die Apple-Version von Clang besser als die aktuelle Version von Clang?

Wie finde ich heraus, auf welcher Version von Clang gehostet wird? http://releases.llvm.org/download.html entspricht meine Mac-Version von Clang?

Ich frage das, weil ich sehe http://releases.llvm.org/6.0.0/tools/clang/docs/UsersManual.html dokumentieren a -pedantic Möglichkeit für die clang Befehlszeile, aber es ist nicht in der Manpage von dokumentiert clang auf meinem System.

$ man clang | grep pedantic
$ clang --help | grep pedantic
$

  • Eine kleine Suche bei Google brachte mich dazu diese GitHub-Gist-Seite. Wenn man dem verlinkten Kommentar glauben darf, würde Ihr Mac Clang Version 4 oder 5 verwenden.

    – Maarten Bamelis

    17. Mai 2018 um 11:52 Uhr

  • Außerdem scheint die Antwort auf diese SO-Frage zu sein, wonach Sie suchen? Es scheint, dass Apple das Versions-Präprozessor-Makro neu definiert hat, um es an ihr eigenes Versionierungsschema anzupassen. Einige andere Antworten auf die verknüpfte Frage könnten Ihnen dabei helfen, herauszufinden, welche genaue LLVM-Version Sie installiert haben.

    – Maarten Bamelis

    17. Mai 2018 um 11:59 Uhr

  • @MaartenBamelis Der Link in der SO-Antwort, auf die Sie verlinkt haben, lautet wie folgt: clang: Apple LLVM version 9.0.0 (clang-900.0.37). Dies scheint keine zusätzlichen Informationen über die Versionen zu liefern. Sehen Sie auf dieser Seite irgendetwas, das zusätzliche Informationen zu liefern scheint?

    – Einzelgänger

    17. Mai 2018 um 12:10 Uhr

  • Es gibt mehrere Antworten, die unterschiedliche Ansätze vorschlagen. Sie schienen alle bis zur Xcode-Version 8.2.1 zu funktionieren; eben die Wikipedia-Seite kann spätere Xcode-Versionen nicht mit einer richtigen LLVM-Version verknüpfen. Meine beste Vermutung ist also, dass es keine klare/dokumentierte Beziehung zwischen Apples Versionen und LLVM-Versionen ab Xcode 8.3 gibt.

    – Maarten Bamelis

    17. Mai 2018 um 12:19 Uhr


  • @MaartenBamelis Also hier ist, was ich nicht verstehen kann. Laut den verschiedenen Quellen, die ich habe, basiert Clang 9.1.0 mindestens auf Clang 4. Clang 4 hat die -pedantic Möglichkeit hier dokumentiert. Aber mein Clang scheint das nicht zu haben -pedantic dokumentiert entweder in der man Seite oder in der --help Ausgang.

    – Einzelgänger

    18. Mai 2018 um 2:18 Uhr

Benutzer-Avatar
Markieren

Terminal starten und eingeben:

clang --version

Apple-Clang-Version 11.0.0 (clang-1100.0.33.16)

  • oder g++ –version, wenn Sie g++ verwenden

    – ng10

    22. Januar 2020 um 21:09 Uhr

Dies Wikipedia-Tabelle Ordnet Xcode- und Apple-Clang-Versionen LLVM-Versionen zu. Ihr clang-902.0.39.1 scheint auf LLVM 5.0.2 zu basieren.

Du könntest versuchen, es zu verwenden

echo | clang -dM -E - | grep __clang

und kann sein das wird Ihnen zuverlässigere Zahlen geben. Obwohl ich spekuliere, da ich nicht auf einem Mac bin.

Außerdem hat das klirren gehabt -pedantic Option für eine lange lange Zeit – viele Versionen vor 6.0. -pedantic ist eine GCC-Option und clang kommt in seinen Optionen nach GCC.

Benutzer-Avatar
Vittore Marcas

Ich bin Experte dafür. Wenn du benutzt “clang --version“, um die Version des Clang-Compilers auf Ihrem Mac auszuchecken, dann, wenn Sie das bekommen haben:

Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Was möchten Sie wissen, was die aktuelle Clang-Version auf dem Mac ist? Mit anderen Worten, Sie möchten fragen, welche Clang-Version für Ihren Xcode auf dem Mac verwendet wurde?

Als Ausgabe Ihres Mac-Terminals (Die Ausgabe sagt Ihnen Dinge über Ihren Xcode auf Ihrem Mac) ist die erste Zeile “Apple LLVM version 9.1.0 (clang-902.0.39.1)” bedeutet: Ihre installierte Xcode-Version war 9.3 oder 9.3.1einschließlich der standardmäßig installierten Clang-Version 9.1.0(Diese Clang-Versionskennung warclang-902.0.39.1). die zweite und dritte Zeile spielen bei Ihrer Clang-Version keine Rolle. die vierte Zeile “InstalledDir: /Library/Developer/CommandLineTools/usr/bin“meint:

Wo verwenden Sie jetzt Clang-Standorte? Oder wenn Sie wissen möchten, welche Clang-Version Ihr Xcode (Mac) verwendet? Sie müssen in dieses Verzeichnis gehen /Library/Developer/CommandLineTools/usr/bin. Verwenden Sie einfach diesen Befehl, um zu überprüfen, welche Clang-Version Ihr Mac (== Xcode) gerade verwendet:

cd /Library/Developer/CommandLineTools/usr/lib/clang/ && ls

Das kann sich so zeigen: 9.0.0 oder 9.1.0 oder 10.0.0. Wie dies möglicherweise zeigt, kann die Clang-Version Ihres Xcode Now verwendet werden 9.0.0oder 9.0.1 oder 10.0.0. Aber warum deine now using Clang version unterscheidet sich von der default installed Clang version of Xcode einschließlich? Oder warum gibt es another Clang version aus dem default including Clang Version von Xcode? Oder Xcode kommt with Clangwarum gibt es another version Clang?

Wie ich weiß, ist die newable-Version von Xcodes gehören dazu Command Line Tools. Oder die neue Version von Xcode wird mitgeliefert Command Line Tools; oder, wenn Sie Xcode verwenden, die Command Line Tools sind auch in die Xcode-IDE eingebettet. Und die Command Line Tool Darunter sind viele nützliche Tools, wie z Apple LLVM Compiler (LLVM-Clang), Linker und Make.

Auch, warum Sie eine haben Command Line Tools of Xcode und ein anderer separated Command-Line Tools. Möglicherweise installieren Sie nach der Installation von Xcode ein separates Befehlszeilentool! Und Sie können die auswählen separated Command-Line Tools über die Verwendung von “xcode-select --switch <path>„um die zu ersetzen default Command Line Tools of Xcode
nach der Anleitung des alten Blogs. Genau wie dieses Bild (von Chinesische Website juejing)
Ihr Mac wählte eingebettete Xcode-Befehlszeilentools

Wie ich sehe, wurde die Xcode.app in gespeichert /Applications/Xcode.app/Contents/Developer. Die getrennten Command Line Tools wurden in gespeichert /Library/Developer/CommandLineTools. Genau wie dieses Bild (von Chinesische Blog-Website juejin):
getrennte Befehlszeilentools VS eingebettete Xcode-Befehlszeilentools

Wenn Sie also “clang --version“, um die von Ihnen verwendete Clang-Version Ihres Mac zu überprüfen, die Folgendes anzeigt:

Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Wenn Sie also den Standard-Xcode der Befehlszeilentools verwenden, was würde das “clang --version” Ausgabe? Hier kommt der Standard-Xcode der Befehlszeilen-Tools:

Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Alles in allem, wenn Sie mehr als einen xcode auf dem Mac installiert haben oder mehr als einen getrennte Befehlszeilen-Tools, haben Sie mehr als ein Befehlszeilentool; Genau wie das Bild (von Chinesischer Website-Blog juejin) zeigt an:
Befehlszeilen-Tools (macOS10.14SDK) VS Befehlszeilen-Tools (macOS10.15SDK)

Andere, die Verbindung von Xcode und command-line tools genau wie dieses Bild (von Chinesische Website juejin)

Xcode-Verbindung mit Befehlszeilentools

Außerdem haben Sie mehr als einen Klang zur Auswahl.

Zuletzt möchte ich noch sagen, welche Clang-Version Ihr Mac verwendet, das hängt vom Verzeichnis des ausgewählten InstalledDir der Befehlszeilentools ab. Wenn Ihr Mac verwenden Sie die Vorgabe embeded Xcode command-line toolsdann das “Apple LLVM version 9.1.0 (clang-902.0.39.1)” zeigt Ihre Verwendung Clang 9.1.0 mit seiner Kennung clang-902.0.39.1Ihr Clang-Installationsverzeichnis war in

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Wenn Ihr Mac verwendet separated command-line toolsdann das “Apple LLVM version 9.1.0 (clang-902.0.39.1)” Drücken Sie NUR Ihren installierten Xcode aus 9.3/9.3.1 mit eingebetteten Befehlszeilentools (Clang 9.1.0) , Ihr Mac verwendete jetzt Befehlszeilentools von Xcode. Und das “InstalledDir: /Library/Developer/CommandLineTools/usr/bin” zeigt, wo sich Ihr Mac mit Befehlszeilentools (Clang-Compiler) befand oder wo sich Ihr Mac mit Clang-Compiler befand.

Last Last Last, Ihre macOS High Sierra Version 10.13.3 könnte die Xcode-Version installieren bis zu Xcode 10.1und Clang-Version bis Clang 10.0.0. Wie dein “clang --version” zeigt, verwenden Sie nicht die eingebetteten Xcode-Befehlszeilentools (Clang). Jetzt verwenden Sie die getrennten (Befehlszeilentools)/Clang, geben Sie Your ein InstalledDir Verzeichnis anzeigen “/Library/Developer/CommandLineTools/usr/bin“, um Now Your Mac mit Version auszuchecken. Verwenden Sie einfach diesen Befehl, um auszuchecken, welche Version von Clang Sie verwenden:

cd /Library/Developer/CommandLineTools/usr/lib/clang/ && ls 

(Schließen Sie aus den Befehlszeilen-Tools, die auf dem aktuellen System Ihres Computers 10.13.3 herunterladbar sind) Take my macOS 10.12 zum Beispiel könnte mein Xcode bis zu Xcode9.2und Clang konnte bis zu Clang9.0.0weil ich separate Kommandozeilentools mit installiert habe Clang 9.0.0Mein VSCode C/C++ Compiler einfach verwenden Clang9.0.0 Über die separaten Befehlszeilentools verwendet My Xcode C/C++ Compiler nur Clang8.1.0 über die eingebetteten Xcode-Befehlszeilentools.

Die ursprüngliche Frage war speziell darauf ausgerichtet, die entsprechende “llvm.org” Clang-Version für einen gegebenen Apple Clang-Compiler zu bestimmen, der von den anderen Antworten nicht gut angesprochen zu werden scheint. In frühen Versionen von Apple Clang war die eigentliche LLVM-Basisversion in der Ausgabe von enthalten clang --version Befehl. Das ist seit Jahren nicht mehr der Fall, und viele Websites, die die LLVM-Versionen auflisten, enthalten keine Informationen über den Punkt hinaus, an dem Apple sie nicht mehr bereitstellt.

Apple unterhält einen öffentlichen Fork des Quellcodes „llvm-project“ auf GitHub. Soweit ich weiß, ist dies der einzig zuverlässige Weg, um die LLVM-Basisversion für eine bestimmte Version von Xcode/Clang/Swift zu bestimmen. Apple überschreibt die LLVM- und Clang-Versionsnummern als Teil des Build-Prozesses, aber die ursprüngliche LLVM-Version ist in der definiert CMakeLists.txt Datei für die llvm Teilprojekt. Sie können die folgenden Schritte verwenden, um die Version für Ihren aktuellen Xcode zu finden:

  1. Laufen swift -frontend -version um die Swift-Version für den installierten Xcode zu erhalten. Dies erscheint kontraintuitiv, wenn Sie versuchen, die Version für Clang zu finden, aber Apple markiert sein Open-Source-Repo basierend auf der Swift-Version.
  2. Offen https://github.com/apple/llvm-project/blob/next/llvm/CMakeLists.txt in Ihrem Webbrowser. Dies ist die Datei, die die LLVM-Versionsnummern enthält, aber Sie landen zunächst auf der aktuellen Entwicklungsversion und nicht auf der eigentlich gewünschten Version.
  3. Suchen Sie in der oberen linken Ecke neben dem Dateinamen nach der Dropdown-Schaltfläche mit dem Wort „Weiter“. Wenn Sie mit GitHub vertraut sind, wissen Sie, dass dies der Branch/Tag-Selektor ist.
  4. Klicken Sie auf das Dropdown-Menü, wechseln Sie zur Ansicht “Tags” und suchen Sie dann nach swift-<version>-RELEASEwo <version> ist die Swift-Versionsnummer aus Schritt 1. Zum Beispiel verwendet Xcode 13.4 Swift 5.6.1, also würden Sie suchen swift-5.6.1-RELEASE. Klicken Sie auf den Tag-Namen, um diese Revision auszuwählen.
  5. In dem CMakeLists.txt Datei suchen Sie nach der Zeile, die die LLVM_VERSION_MAJOR Variable. Die MAJOR-, MINOR- und PATCH-Versionen geben Ihnen die genaue Version von LLVM, auf der der Apple-Build basiert. Für Xcode 13.4, wo Apple Clang eine Version von 13.1.6 meldet, werden Sie sehen, dass es auf LLVM 13.0.0 basiert.

Die Hauptversion für Apple Clang ist immer die gleiche wie die Hauptversion des entsprechenden Xcode. Die Tatsache, dass die Hauptversion von Apple Clang und die Basis-LLVM im Beispiel von Xcode 13.4 zufällig übereinstimmen, ist rein zufällig. Clang 13.1.6, das erstmals mit Xcode 13.3 veröffentlicht wurde, ist die erste Veröffentlichung seit Jahren, bei der dies der Fall war, obwohl die Neben- und Patch-Versionen offensichtlich immer noch unterschiedlich sind.

Beachten Sie auch, dass Apple Clang nur ist bezogen auf den entsprechenden “llvm.org”-Quellcode. Es basiert auf einem Fork, der einige Apple-spezifische Unterschiede enthalten kann, und es gibt auch zusätzliche Codeänderungen in der proprietären Xcode-Version von Apple Clang, die möglicherweise nicht im Open-Source-Fork von Apple auf GitHub erscheinen.

Schließlich können viele Standardwerte zur Erstellungszeit angegeben werden und können zwischen den Apple- und “llvm.org”-Clang-Compilern unterschiedlich sein. Beispielsweise verwendet Apple Clang manchmal andere standardmäßige C- und C++-Standards, wenn eine bestimmte Standardversion nicht in der Befehlszeile angegeben ist. Apple Clang 13.1.6 und „llvm.org“ verwenden beide standardmäßig C17 für den C-Standard, aber Apple verwendet weiterhin standardmäßig den ursprünglichen C++98-Standard für C++, während „llvm.org“ Clang 13 standardmäßig C++14 verwendet.

1099030cookie-checkWie finde ich die aktuelle Clang-Version auf dem Mac?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy