Comment installer clang ++ récent avec Homebrew?

20

J'ai essayé

brew install llvm

mais après cela, je ne trouve aucun clang++*exécutable sous /usr/local.

D'où ma question: comment obtenir clang ++ via Homebrew?

maxschlepzig
la source

Réponses:

18

Depuis 2018, le référentiel des versions Homebrew ('tap') est hors service .

Le package stock Homebrew llvm n'inclut toujours pas clang / clang ++, par défaut. Ainsi, il ne fait pas partie du package prédéfini («en bouteille»).

On peut le construire via:

brew install --with-toolchain llvm

Et puis utilisez-le par exemple:

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

Mais cette --with-toolchainconstruction induite prend beaucoup de temps et n'est donc pas adaptée dans un environnement d'intégration continue (CI).

Cependant, le bruit qui vient avec le XCode récent (qui est disponible dans les environnements CI comme Travis-CI, la version 9 est la valeur par défaut, 10 également disponible) n'est plus aussi obsolète qu'auparavant (Apple utilise un schéma de version fantastique pour clang qui ne correspond pas aux numéros de version de clang en amont mais cmake détecte par exemple pour AppleClang 9.1.0.9020039 la version 4.0.1). Ainsi, il suffit de construire un logiciel C ++ 11 / C ++ 14 avec des dépendances communes comme Boost (par exemple la version 1.67).

État de l'art 2016

Le llvmpackage dans Homebrew ne comprend pas clang++, par défaut. Lors de son installation, vous devez ajouter --with-clangà la ligne de commande (par exemple brew install --with-clang llvm). L'extra --with-clangdonne une compilation complète du package car il n'y a qu'un seul package de pré-construction («en bouteille») llvmdisponible (sans clang++). En plus de cela: le llvmpackage est relativement ancien - il a actuellement llvm 3.6 - où 3.7 est sorti il ​​y a 6 mois.

Ainsi, pour obtenir une version clang++3.7 en bouteille, vous devez installer le package llvm à partir des versions Homebrew :

$ brew tap homebrew/versions
$ brew install llvm37

Il est ensuite disponible sous:

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

La formule note également:

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
la source
Notez que si vous faites cela pour Emscripten, vous devez utiliser la version clang qu'ils fournissent.
Claudiu
7
La dernière Homebrew llvm(3.9.1) dans le homebrew-corerobinet comprend maintenant clang, clang++etc. sous/usr/local/opt/llvm/bin
shadowtalker
1
Complément au commentaire de @ ssdecontrol: il y a --with-toolchainmaintenant un argument dont certains utilisateurs pourraient avoir besoin. Plus d'informations ici, embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx
driftcatcher
Shadowtalker a raison, et depuis lors, l' --with-clangargument a été supprimé.
MCCCS
@shadowtalker, dois-je exécuter brew install --with-toolchain llvmcomme @hangtwenty suggère ou est brew install llvmsuffisant? Avec l' --with-toolchainoption, le package est compilé - ce qui prend beaucoup de temps - par rapport à l'installation d'un package prédéfini (en bouteille / binaire).
maxschlepzig
4

Vous devez l'installer avec l' --with-clangoption:

$ 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

Ensuite, vous trouverez clang++sur / usr / local / opt / llvm / bin / clang ++ .

jherran
la source
1
Hm, est-il possible d'obtenir toujours un paquet binaire pré-construit (c'est-à-dire une 'bouteille')? Je veux dire en spécifiant --with-clang? Je demande parce que j'ai l'intention d'appeler cela dans un environnement d'intégration continue ...
maxschlepzig
S'il existe, je le sais, mais je ne pense pas que cela existe.
jherran
1
En fait, il existe une version en bouteille disponible via les versions Homebrew. Voir aussi ma réponse.
maxschlepzig
3

Les options --with-clang et --with-toolchain ne fonctionnent plus. Cela a fonctionné pour moi:

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

J'ai compilé avec

CC=/usr/local/cellar/llvm/7.0.1/bin/clang CCX=/usr/local/cellar/llvm/7.0.1/bin/clang++ make
Dweezahr
la source
1
Malheureusement, le bruit binaire de l'homebrew est cassé. Il n'inclut pas le /usr/local/includedossier comme répertoire d' inclusion de base, donc toute construction logicielle échoue. Clang fourni par xcode n'a pas fsanitize=leaket ccc-analyzer. Donc, les deux coups sur mac os sont brisés. Vous devez le construire avec toutes les fonctionnalités activées à partir de la source. Mais la compilation tuera votre CI comme travis. Vous devez donc héberger et maintenir un CI séparé uniquement pour Apple. Apple n'est bon que pour un développement simple, tout le reste nécessite de la peine.
puchu
3

Maintenant, il suffit de courir:

brew install llvm

La bouteille comprend désormais clangpar défaut.

wieczorek1990
la source
Nous recherchons de longues réponses qui fournissent une explication et un contexte. Ne vous contentez pas de donner une réponse sur une seule ligne; expliquez pourquoi votre réponse est juste, idéalement avec des citations. Les réponses qui ne contiennent pas d'explications peuvent être supprimées.
Tetsujin
@Tetsujin Je suis d'accord avec vous, mais c'est essentiellement une réponse complète. Il décrit pleinement ce qui est nécessaire et pourquoi
Lars Nielsen