47 votes

Comment installer un clang++ récent avec Homebrew ?

J'ai essayé

brew install llvm

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

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

44voto

lemotdit Points 170

Maintenant, c'est suffisant pour courir :

brew install llvm

La bouteille comprend désormais clang par défaut.

1 votes

Nous recherchons des réponses longues qui fournissent des explications et un contexte. Ne vous contentez pas d'une réponse d'une ligne ; expliquez pourquoi votre réponse est correcte, idéalement en la citant. Les réponses qui n'incluent pas d'explications peuvent être supprimées.

21 votes

@Tetsujin Je suis d'accord avec vous, mais c'est essentiellement une réponse complète. Elle décrit pleinement ce qui est nécessaire et pourquoi

3 votes

Juste pour la confusion, comme c'est keg seulement, le binaire pour clang sera par exemple dans /usr/local/Cellar/llvm/12.0.1/bin/clang ou n'importe quelle version que vous avez.

25voto

maxschlepzig Points 653

À partir de 2018, le Le dépôt de versions Homebrew ('tap') est hors service .

Le paquetage Homebrew llvm n'inclut toujours pas clang/clang++, par défaut. Ainsi, il ne fait pas partie du paquetage préconstruit ('bottled').

On peut le construire via :

brew install --with-toolchain llvm

Et ensuite l'utiliser via 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-toolchain La construction induite prend beaucoup de temps et n'est donc pas adaptée à un environnement d'intégration continue (IC).

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

État des lieux 2016

Le site llvm dans Homebrew n'inclut 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 ). Le supplément --with-clang donne une compilation complète du paquet parce qu'il n'y a qu'un seul prebuild ('bottled') llvm disponible (sans clang++ ). En outre, le llvm est relativement ancien - il contient actuellement llvm 3.6, alors que la version 3.7 est sortie il y a 6 mois.

Ainsi, pour obtenir une bouteille clang++ 3.7 vous devez installer le paquet llvm à partir de 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"

0 votes

Notez que si vous faites cela pour Emscripten, vous devez utiliser la version de clang qu'ils fournissent.

8 votes

Le dernier Homebrew llvm (3.9.1) dans le homebrew-core Le robinet comprend maintenant clang , clang++ etc. sous /usr/local/opt/llvm/bin

1 votes

Complément au commentaire de @ssdecontrol : il existe une --with-toolchain argument maintenant que certains utilisateurs pourraient avoir besoin. Plus d'informations ici, embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx

5voto

amrtn Points 169

Les options --with-clang et --with-toolchain ne fonctionnent plus. Ceci 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

1 votes

Malheureusement, le binaire clang de homebrew est cassé. Il n'inclut pas /usr/local/include comme répertoire d'inclusion de base, ce qui fait que la construction de tous les logiciels échoue. Clang fourni par xcode ne dispose pas de fsanitize=leak y ccc-analyzer . Donc les deux clangs sur mac os sont cassés. Vous devez le construire avec toutes les fonctionnalités activées à partir des sources. Mais la compilation va tuer votre CI comme travis. Vous devez donc héberger et maintenir un CI séparé uniquement pour Apple. Apple n'est bon que pour le développement simple, tout le reste demande de la peine.

4voto

jherran Points 12554

Vous devez l'installer avec --with-clang option :

$ 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++ .

1 votes

Est-il encore possible d'obtenir un paquet binaire préconstruit (c'est-à-dire une "bouteille") ? Je veux dire que lorsque l'on spécifie --with-clang ? Je demande parce que j'ai l'intention d'appeler cela dans un environnement d'intégration continue ...

0 votes

Si ça existe, je suis au courant, mais je ne pense pas que ça existe.

1 votes

En fait, il existe une version en bouteille disponible via Homebrew Versions. Voir aussi ma réponse.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X