Як встановити останній clang ++ за допомогою Homebrew?


20

Я намагався

brew install llvm

але після цього я не можу знайти жодного clang++*виконуваного файлу під /usr/local.

Таким чином, моє запитання: Як отримати clang ++ через Homebrew?

Відповіді:


18

Станом на 2018 рік сховище Homebrew Versions ("кран") не працює .

Пакет llvm акцій Homebrew як і раніше не включає 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).

Однак клакс, що поставляється з останнім XCode (який доступний у середовищах CI, таких як Travis-CI, версія 9 за замовчуванням, 10 доступна теж), вже не застаріла, як раніше (Apple використовує схему версій фантазії для клангу, який не відповідає номерам версій за версією, але 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). Додатковий результат --with-clangдає повну компіляцію пакетів, оскільки доступний лише один попередній збірний llvmпакет (без нього 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"

Зауважте, що якщо ви робите це для Emscripten, ви повинні використовувати кланг-версію, яку вони надають.
Клавдіу

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/installing-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 ++ .


1
Гм, чи можна все-таки отримати попередньо створений двійковий пакет (тобто «пляшку»)? Я маю на увазі при вказівці --with-clang? Я прошу, тому що я маю намір викликати це в середовищі безперервної інтеграції ...
maxschlepzig

Якщо вона існує, я про це знаю, але не думаю, що існує.
jherran

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

1
На жаль, доморощений двійковий кланг порушений. Вона не включає /usr/local/includeпапку, як база включає в себе dir, тому вся збірка програмного забезпечення виходить з ладу. Кланг, наданий xcode, не має fsanitize=leakта ccc-analyzer. Таким чином, обидва клакси на mac os зламані. Ви повинні побудувати його з усіма функціями, включеними з джерела. Але компіляція вб'є ваш КІ, як травіс. Тож вам доведеться розміщувати та підтримувати окремий ІС лише для яблук. Яблуко добре лише для простого розвитку, все інше вимагає болю.
пучу

3

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

brew install llvm

Пляшка тепер включає clangза замовчуванням.


Ми шукаємо довгі відповіді, які дають певні пояснення та контекст. Не просто дайте однорядну відповідь; поясніть, чому ваша відповідь правильна, в ідеалі - цитатами. Відповіді, які не містять пояснень, можуть бути видалені.
Tetsujin

@Tetsujin Я згоден з вами, але це, по суті, повна відповідь. Тут повністю описано, що потрібно і навіщо
Ларс Нільсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.