Jak zainstalować najnowszą wersję clang ++ z Homebrew?

20

próbowałem

brew install llvm

ale po tym nie mogę znaleźć żadnego clang++*pliku wykonywalnego /usr/local.

Zatem moje pytanie: jak zdobyć clang ++ przez Homebrew?

maxschlepzig
źródło

Odpowiedzi:

18

Od 2018 r. Repozytorium wersji Homebrew („dotknij”) nie działa .

Standardowy pakiet Homebrew llvm nadal nie zawiera clang / clang ++. W związku z tym nie jest częścią wstępnie zbudowanego („butelkowanego”) pakietu.

Można go zbudować poprzez:

brew install --with-toolchain llvm

A następnie użyj go np .:

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

Ale ta --with-toolchainindukowana kompilacja zajmuje bardzo dużo czasu i dlatego nie nadaje się w środowisku ciągłej integracji (CI).

Jednak clang, który jest dostarczany z najnowszym XCode (który jest dostępny w środowiskach CI, takich jak Travis-CI, wersja 9 jest domyślna, 10 również dostępne) nie jest już tak przestarzały, jak kiedyś (Apple stosuje schemat wersji fantasy dla clang, który nie pasuje do wcześniejszych numerów wersji clang, ale cmake wykrywa np. dla AppleClang 9.1.0.9020039 wersja 4.0.1). Wystarczy zatem zbudować oprogramowanie C ++ 11 / C ++ 14 z typowymi zależnościami, takimi jak Boost (np. Wersja 1.67).

2016 Stan techniki

llvmPakiet w Homebrew nie zawiera clang++domyślnie. Podczas instalacji musisz dodać --with-clangdo wiersza poleceń (np brew install --with-clang llvm.). Dodatek --with-clangdaje kompilację pełnego pakietu, ponieważ dostępny jest tylko jeden pakiet prebuild („butelkowany”) llvm(bez clang++). Ponadto: llvmpakiet jest stosunkowo stary - obecnie ma lvvm 3.6 - gdzie wersja 3.7 została wydana 6 miesięcy temu.

Tak więc, aby uzyskać butelkowaną wersję clang++3.7, musisz zainstalować pakiet llvm z wersji Homebrew :

$ brew tap homebrew/versions
$ brew install llvm37

Jest on następnie dostępny pod:

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

Formuła zauważa również:

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"
maxschlepzig
źródło
Pamiętaj, że jeśli robisz to dla Emscripten, musisz użyć dostarczonej przez nich wersji clang.
Claudiu
7
Najnowszy Homebrew llvm(3.9.1) w homebrew-corekranu zawiera teraz clang, clang++itp pod/usr/local/opt/llvm/bin
shadowtalker
1
Uzupełnienie komentarza @ ssdecontrol: teraz jest --with-toolchainargument, którego niektórzy użytkownicy mogą potrzebować. Więcej informacji tutaj, embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx
driftcatcher
Shadowtalker ma rację i od tego czasu --with-clangargument został usunięty.
MCCCS
@shadowtalker, czy muszę wykonać, brew install --with-toolchain llvmponieważ @ hangtwenty sugeruje lub jest brew install llvmwystarczające? Dzięki tej --with-toolchainopcji pakiet jest kompilowany - co jest bardzo czasochłonne - w porównaniu do zwykłej instalacji pakietu (butelkowanego / binarnego).
maxschlepzig
4

Musisz go zainstalować z --with-clangopcją:

$ 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

Następnie znajdziesz clang++na / usr / local / opt / llvm / bin / clang ++ .

Jherran
źródło
1
Hm, czy nadal można uzyskać gotowy pakiet binarny (np. „Butelkę”)? Mam na myśli przy określaniu --with-clang? Pytam, ponieważ zamierzam to nazwać w środowisku ciągłej integracji ...
maxschlepzig
Jeśli istnieje, wiem o tym z góry, ale nie sądzę, żeby istniał.
jherran
1
W rzeczywistości dostępna jest wersja butelkowa dostępna w wersjach Homebrew. Zobacz także moją odpowiedź.
maxschlepzig
3

Opcje --with-clang i --with-toolchain już nie działają. To działało dla mnie:

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

Kompilowałem się z

CC=/usr/local/cellar/llvm/7.0.1/bin/clang CCX=/usr/local/cellar/llvm/7.0.1/bin/clang++ make
Dweezahr
źródło
1
Niestety binarny clang homebrew jest zepsuty. Nie zawiera /usr/local/includefolderów, ponieważ baza zawiera katalog, więc kompilacja oprogramowania kończy się niepowodzeniem. Clang dostarczony przez xcode nie ma fsanitize=leaki ccc-analyzer. Więc oba kliknięcia w Mac OS są zepsute. Musisz go zbudować z włączonymi wszystkimi funkcjami ze źródła. Ale kompilacja zabije Twój CI jak Travis. Więc musisz hostować i utrzymywać osobne CI tylko dla Apple. Jabłko nadaje się tylko do prostego rozwoju, wszystko inne wymaga bólu.
puchu
3

Teraz wystarczy uruchomić:

brew install llvm

Butelka zawiera teraz clangdomyślnie.

wieczorek1990
źródło
Szukamy długich odpowiedzi, które zawierają wyjaśnienia i kontekst. Nie udzielaj odpowiedzi w jednym wierszu; wyjaśnij, dlaczego Twoja odpowiedź jest poprawna, najlepiej z cytatami. Odpowiedzi, które nie zawierają wyjaśnień, mogą zostać usunięte.
Tetsujin
@Tetsujin Zgadzam się z tobą, ale jest to zasadniczo pełna odpowiedź. W pełni opisuje, co jest potrzebne i dlaczego
Lars Nielsen