Como instalar clang ++ recente com o Homebrew?

20

eu tentei

brew install llvm

mas depois disso não consigo encontrar nenhum clang++*executável abaixo /usr/local.

Assim, a minha pergunta: Como obter clang ++ via Homebrew?

maxschlepzig
fonte

Respostas:

18

A partir de 2018, o repositório Homebrew Versions ('tap') está fora de serviço .

O pacote padrão Homebrew llvm ainda não inclui clang / clang ++, por padrão. Portanto, não faz parte do pacote pré-construído ('engarrafado').

Pode-se construir através de:

brew install --with-toolchain llvm

E depois use-o por exemplo:

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

Mas essa --with-toolchaincompilação induzida leva muito tempo e, portanto, é inadequada em um ambiente de integração contínua (IC).

No entanto, o clang que acompanha o XCode recente (que está disponível em ambientes de CI como Travis-CI, Versão 9 é o padrão, 10 disponíveis também) não está mais desatualizado como costumava ser (a Apple usa um esquema de versão de fantasia para clang que não corresponde aos números de versão upstream, mas cmake detecta, por exemplo, para AppleClang 9.1.0.9020039 a versão 4.0.1). Portanto, é suficiente compilar o software C ++ 11 / C ++ 14 com dependências comuns como o Boost (por exemplo, versão 1.67).

Estado da arte de 2016

O llvmpacote no Homebrew não inclui clang++, por padrão. Ao instalá-lo, você deve adicionar --with-clangà linha de comando (por exemplo brew install --with-clang llvm). O extra --with-clanggera uma compilação completa do pacote, porque há apenas um pacote de pré-compilação ('engarrafado') llvmdisponível (sem clang++). Além disso: o llvmpacote é relativamente antigo - atualmente possui o llvm 3.6 - onde o 3.7 foi lançado há 6 meses.

Portanto, para obter um clang++3.7 engarrafado, é necessário instalar o pacote llvm nas versões Homebrew :

$ brew tap homebrew/versions
$ brew install llvm37

Está então disponível em:

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

A fórmula também observa:

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
fonte
Observe que se você estiver fazendo isso para o Emscripten, precisará usar a versão clang que eles fornecem.
Claudiu
7
A última Homebrew llvm(3.9.1) na homebrew-coretorneira agora inclui clang, clang++etc. sob/usr/local/opt/llvm/bin
shadowtalker
11
Complemente o comentário do @ ssdecontrol: há um --with-toolchainargumento agora que alguns usuários podem precisar. Mais informações aqui, embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx
driftcatcher
Shadowtalker está certo e, desde então, o --with-clangargumento foi removido.
MCCCS
@ shadowtalker, eu tenho que executar brew install --with-toolchain llvmcomo @hangtwenty está sugerindo ou é brew install llvmsuficiente? Com a --with-toolchainopção, o pacote é compilado - o que consome muito tempo - em comparação com apenas a instalação de um pacote pré-construído (engarrafado / binário).
maxschlepzig
4

Você precisa instalá-lo com a --with-clangopção:

$ 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

Então, você encontrará clang++em / usr / local / opt / llvm / bin / clang ++ .

jherran
fonte
11
Hum, é possível ainda obter um pacote binário pré-construído (ou seja, uma 'garrafa')? Quero dizer ao especificar --with-clang? Estou perguntando porque eu pretendo chamar isso em um ambiente de integração contínua ...
maxschlepzig
Se existe, eu sei disso, mas acho que não existe.
jherran
11
Na verdade, há uma versão engarrafada disponível nas versões Homebrew. Veja também minha resposta.
maxschlepzig
3

As opções --with-clang e --with-toolchain não funcionam mais. Isso funcionou para mim:

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

Eu compilei com

CC=/usr/local/cellar/llvm/7.0.1/bin/clang CCX=/usr/local/cellar/llvm/7.0.1/bin/clang++ make
Dweezahr
fonte
11
Infelizmente, o clang binário do homebrew está quebrado. Ele não inclui a /usr/local/includepasta como dir de inclusão básica, portanto, toda a criação do software falha. O clang fornecido pelo xcode não possui fsanitize=leake ccc-analyzer. Portanto, os dois clangs no mac os estão quebrados. Você precisa construí-lo com todos os recursos ativados da fonte. Mas a compilação matará seu IC como travis. Portanto, você deve hospedar e manter o IC separado apenas para a apple. Apple é bom apenas para o desenvolvimento simples, qualquer outra coisa requer dor.
puchu
3

Agora basta executar:

brew install llvm

A garrafa agora inclui clangpor padrão.

wieczorek1990
fonte
Estamos procurando respostas longas que forneçam alguma explicação e contexto. Não basta dar uma resposta em uma linha; explique por que sua resposta está correta, idealmente com citações. As respostas que não incluem explicações podem ser removidas.
Tetsujin
@ Tetsujin Concordo com você, mas esta é essencialmente uma resposta completa. Descreve completamente o que é necessário e por quê
Lars Nielsen