Wie installiere ich Clang ++ mit Homebrew?


20

ich habe es versucht

brew install llvm

aber danach kann ich keine clang++*ausführbare Datei unter finden /usr/local.

Also meine Frage: Wie bekomme ich Clang ++ über Homebrew?

Antworten:


18

Ab 2018 ist das Homebrew Versions-Repository ('tap') außer Betrieb .

Das Standardpaket von Homebrew llvm enthält standardmäßig noch kein clang / clang ++. Daher ist es nicht Teil des vorgefertigten Pakets ("abgefüllt").

Man kann es bauen über:

brew install --with-toolchain llvm

Und dann benutze es zB über:

$ PATH="/usr/local/opt/llvm/bin:$PATH" \
    LDFLAGS='-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib' \
    cmake ...

Dieser --with-toolchaininduzierte Build dauert jedoch sehr lange und ist daher in einer Umgebung mit kontinuierlicher Integration (Continuous Integration, CI) ungeeignet.

Der Clang, der mit dem aktuellen XCode (der in CI-Umgebungen wie Travis-CI, Version 9, verfügbar ist, und auch in Version 10) geliefert wird, ist jedoch nicht mehr so ​​veraltet wie früher (Apple verwendet ein Fantasy-Versionsschema) für clang, das nicht mit den Versionsnummern des Upstream-Clangs übereinstimmt, aber cmake erkennt z. B. für AppleClang 9.1.0.9020039 die Version 4.0.1). Es reicht also aus, C ++ 11 / C ++ 14-Software mit gängigen Abhängigkeiten wie Boost (z. B. Version 1.67) zu erstellen.

Stand der Technik 2016

Das llvmPaket in Homebrew enthält clang++standardmäßig nicht. Bei der Installation müssen Sie --with-clangder Kommandozeile hinzufügen (zB brew install --with-clang llvm). Das Extra --with-clangergibt eine vollständige Paketkompilierung, da nur ein vorgefertigtes ('abgefülltes') llvmPaket verfügbar ist (ohne clang++). Hinzu kommt, dass das llvmPaket relativ alt ist - derzeit hat es llvm 3.6 -, wo 3.7 vor 6 Monaten veröffentlicht wurde.

Um einen abgefüllten clang++3.7 zu erhalten, müssen Sie das llvm-Paket von Homebrew-Versionen installieren :

$ brew tap homebrew/versions
$ brew install llvm37

Es ist dann verfügbar unter:

/usr/local/bin/clang++-3.7

In der Formel wird außerdem Folgendes angegeben:

To link to libc++, something like the following is required:
  CXX="clang++-3.7 -stdlib=libc++"
  CXXFLAGS="$CXXFLAGS -nostdinc++ -I/usr/local/opt/llvm37/lib/llvm-3.7/include/c++/v1"
  LDFLAGS="$LDFLAGS -L/usr/local/opt/llvm37/lib/llvm-3.7/lib"

Beachten Sie, dass Sie die von Emscripten bereitgestellte Clang-Version verwenden müssen, wenn Sie dies für Emscripten tun.
Claudiu

7
Die neueste Homebrew llvm(3.9.1) in dem homebrew-coreWasserhahn enthält jetzt clang, clang++usw. unter/usr/local/opt/llvm/bin
shadowtalker

1
Ergänzung zu @ ssdecontrols Kommentar: --with-toolchainEinige Benutzer benötigen möglicherweise ein Argument. Weitere Informationen hier, embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx
driftcatcher

Shadowtalker hat recht und seitdem wurde das --with-clangArgument entfernt.
MCCCS

@shadowtalker, muss ich ausführen, brew install --with-toolchain llvmwie @hangtwenty vorschlägt oder brew install llvmausreicht? Mit der --with-toolchainOption wird das Paket kompiliert - was im Vergleich zur Installation eines vorgefertigten (abgefüllten / binären) Pakets sehr zeitaufwendig ist.
Maxschlepzig

4

Sie müssen es mit der --with-clangOption installieren :

$ brew install --with-clang llvm
==> Installing dependencies for llvm: cmake
==> Installing llvm dependency: cmake
==> Downloading https://homebrew.bintray.com/bottles/cmake-3.4.3.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring cmake-3.4.3.el_capitan.bottle.tar.gz
==> Caveats
Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/cmake
==> Summary
🍺  /usr/local/Cellar/cmake/3.4.3: 1,980 files, 27.4M
==> Installing llvm
==> Downloading http://llvm.org/releases/3.6.2/llvm-3.6.2.src.tar.xz
######################################################################## 100.0%
==> Downloading http://llvm.org/releases/3.6.2/cfe-3.6.2.src.tar.xz
######################################################################## 100.0%
==> cmake -G Unix Makefiles /private/tmp/llvm20160211-42310-16fdrbw/llvm-3.6.2.src -DCMAKE_C_FLAGS_RELEASE=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEAS
==> make
==> make install
==> Caveats
LLVM executables are installed in /usr/local/opt/llvm/bin.
Extra tools are installed in /usr/local/opt/llvm/share/llvm.

This formula is keg-only, which means it was not symlinked into /usr/local.

OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/llvm/lib
    CPPFLAGS: -I/usr/local/opt/llvm/include


If you need Python to find bindings for this keg-only formula, run:
  echo /usr/local/opt/llvm/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/llvm.pth
==> Summary
🍺  /usr/local/Cellar/llvm/3.6.2: 1,350 files, 338.2M, built in 21 minutes 18 seconds

Dann finden Sie clang++auf / usr / local / opt / llvm / bin / Klirren ++ .


1
Hm, ist es noch möglich, ein vorgefertigtes Binärpaket (dh eine "Flasche") zu bekommen? Ich meine bei der Angabe --with-clang? Ich
frage

Wenn vorhanden, weiß ich es nicht, aber ich glaube nicht, dass es das gibt.
Herran

1
Tatsächlich gibt es eine Flaschenversion, die über Homebrew-Versionen erhältlich ist. Siehe auch meine Antwort.
Maxschlepzig

3

Die Optionen --with-clang und --with-toolchain funktionieren nicht mehr. Das hat bei mir funktioniert:

brew install llvm
cd /Library/Developer/CommandLineTools/Packages/
open .
run the installer

Ich habe mit kompiliert

CC=/usr/local/cellar/llvm/7.0.1/bin/clang CCX=/usr/local/cellar/llvm/7.0.1/bin/clang++ make

1
Leider ist Homebrew Binary Clang kaputt. Es enthält keinen /usr/local/includeOrdner als Basis-Include-Verzeichnis, sodass alle Software-Builds fehlschlagen. Clang zur Verfügung gestellt von Xcode nicht haben fsanitize=leakund ccc-analyzer. Also sind beide Klänge auf dem Mac OS kaputt. Sie müssen es mit allen Funktionen aus dem Quellcode erstellen. Aber die Zusammenstellung wird Ihr CI wie Travis töten. Sie müssen also separate CIs nur für Apple hosten und verwalten. Apple ist nur für die einfache Entwicklung gut, alles andere erfordert Schmerzen.
Puchu

3

Jetzt reicht es zu rennen:

brew install llvm

Die Flasche enthält jetzt clangstandardmäßig.


Wir suchen lange Antworten, die einige Erklärungen und Zusammenhänge liefern. Geben Sie nicht nur eine einzeilige Antwort; Erklären Sie, warum Ihre Antwort richtig ist, idealerweise mit Zitaten. Antworten, die keine Erklärungen enthalten, werden möglicherweise entfernt.
Tetsujin

@ Tetsujin Ich stimme Ihnen zu, aber dies ist im Wesentlichen eine vollständige Antwort. Es beschreibt vollständig, was benötigt wird und warum
Lars Nielsen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.