Как установить недавний clang ++ с Homebrew?

20

я пробовал

brew install llvm

но после этого я не могу найти clang++*исполняемый файл под /usr/local.

Таким образом, мой вопрос: как получить Clang ++ через Homebrew?

maxschlepzig
источник

Ответы:

18

С 2018 года репозиторий Homebrew Versions («tap») не работает .

В стандартный пакет Homebrew llvm по-прежнему не входит clang / clang ++. Таким образом, он не является частью готового («бутылочного») пакета.

Можно построить это через:

brew install --with-toolchain llvm

А затем используйте его, например:

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

Но эта --with-toolchainвынужденная сборка занимает очень много времени и, таким образом, не подходит в среде непрерывной интеграции (CI).

Тем не менее, Clang, который поставляется с недавним XCode (который доступен в CI-средах, таких как Travis-CI, версия 9 по умолчанию, 10 также доступна) уже не так устарел, как раньше (Apple использует фантастическую схему версии для clang, который не совпадает с номерами версий вышестоящего clang, но cmake обнаруживает, например, для AppleClang 9.1.0.9020039 версию 4.0.1). Таким образом, достаточно создать программное обеспечение C ++ 11 / C ++ 14 с общими зависимостями, такими как Boost (например, версия 1.67).

2016 Состояние искусства

llvmПакет в Homebrew не включает в себя clang++, по умолчанию. При установке его необходимо добавить --with-clangв командную строку (например brew install --with-clang llvm). Extra --with-clangдает полную компиляцию пакета, потому что llvmдоступен только один пакет prebuild («бутылочный») (без clang++). В дополнение к этому: llvmпакет является относительно старым - в настоящее время он имеет llvm 3.6 - где 3.7 был выпущен 6 месяцев назад.

Таким образом, чтобы получить бутылку clang++3.7, вы должны установить пакет llvm из Homebrew Versions :

$ brew tap homebrew/versions
$ brew install llvm37

Это тогда доступно под:

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

Формула также отмечает:

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
источник
Обратите внимание, что если вы делаете это для Emscripten, вы должны использовать версию clang, которую они предоставляют.
Клаудиу
7
Последняя Homebrew llvm(3.9.1) в homebrew-coreкране теперь включает в себя clang, clang++и т.д. под/usr/local/opt/llvm/bin
shadowtalker
1
Дополнение к комментарию @ ssdecontrol: теперь есть --with-toolchainаргумент, который может понадобиться некоторым пользователям. Более подробная информация здесь, embeddedartistry.com/blog/2017/2/20/install-clangllvm-on-osx
driftcatcher
Shadowtalker прав, и с тех пор --with-clangаргумент был удален.
MCCCS
@shadowtalker, я должен выполнить, brew install --with-toolchain llvmкак подсказывает @hangtwenty или brew install llvmдостаточно? С помощью этой --with-toolchainопции пакет компилируется - что занимает очень много времени - по сравнению с простой установкой предварительно собранного (бутылочного / двоичного) пакета.
maxschlepzig
4

Вы должны установить его с --with-clangопцией:

$ 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

Затем вы найдете clang++в / usr / local / opt / llvm / bin / clang ++ .

jherran
источник
1
Хм, возможно ли получить предварительно собранный двоичный пакет (то есть «бутылку»)? Я имею ввиду при указании --with-clang? Я спрашиваю, потому что я собираюсь назвать это в среде непрерывной интеграции ...
maxschlepzig
Если существует, я знаю об этом, но я не думаю, что это существует.
Джерран
1
На самом деле, есть версия в бутылках, доступная через Homebrew Versions. Смотрите также мой ответ.
maxschlepzig
3

Опции --with-clang и --with-toolchain больше не работают. Это сработало для меня:

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

Я скомпилировал с

CC=/usr/local/cellar/llvm/7.0.1/bin/clang CCX=/usr/local/cellar/llvm/7.0.1/bin/clang++ make
Dweezahr
источник
1
К сожалению, доморощенный бинарный лязг сломан. Он не включает в себя /usr/local/includeпапку, так как база включает dir, поэтому сборка программного обеспечения завершается неудачно. Clang, предоставляемый xcode, не имеет fsanitize=leakи ccc-analyzer. Так что оба лязга на Mac OS сломаны. Вы должны построить его со всеми функциями, включенными из источника. Но компиляция убьет ваш CI, как Трэвис. Таким образом, вы должны размещать и поддерживать отдельный CI только для Apple. Apple хороша только для простого развития, все остальное требует боли.
Пучу
3

Теперь достаточно запустить:

brew install llvm

Бутылка теперь включает clangпо умолчанию.

wieczorek1990
источник
Мы ищем длинные ответы, которые дают некоторое объяснение и контекст. Не просто дать ответ в одну строку; объясните, почему ваш ответ правильный, в идеале с цитатами. Ответы, не содержащие объяснений, могут быть удалены.
Тецудзин
@ Tetsujin Я согласен с тобой, но это по сути полный ответ. Он полностью описывает, что нужно и зачем
Ларс Нильсен