如何使用Homebrew安装最新的clang ++?


20

我试过了

brew install llvm

但是在那之后我找不到任何clang++*可执行文件/usr/local

因此,我的问题是:如何通过Homebrew获得clang ++?

Answers:


18

截至2018年,Homebrew版本库('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)环境中使用。

但是,最近的XCode附带的clang(可在Travis-CI等CI环境中使用,默认版本为9,10也可用)不再像以前那样过时了(Apple使用幻想版本方案)对于与上游clang版本号不匹配但cmake检测到例如AppleClang 9.1.0.9020039 4.0.1版本的clang)。因此,构建具有Boost等常见依赖项(例如1.67版)的C ++ 11 / C ++ 14软件就足够了。

2016先进水平

默认情况下llvm,Homebrew中的软件包不包含clang++。安装时,您必须添加--with-clang到命令行(例如brew install --with-clang llvm)。多余的部分将--with-clang生成完整的软件包,因为只有一个预构建(“瓶装”)llvm软件包可用(无clang++)。除此之外:该llvm软件包相对较旧-当前具有llvm 3.6-6个月前发布了3.7。

因此,要获取瓶装clang++3.7,必须从Homebrew Versions安装llvm软件包:

$ 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执行此操作,则必须使用它们提供的clang版本。
Claudiu

7
最新自制llvm的(3.9.1)homebrew-core自来水现在包括clangclang++等下/usr/local/opt/llvm/bin
shadowtalker

1
对@ssdecontrol的评论的补充:--with-toolchain现在有一个论点,一些用户可能需要。此处的更多信息,embeddedartistry.com
blog / 2017/2/20 / installing

Shadowtalker是对的,自那时以来,--with-clang参数已被删除。
MCCCS'Mar

@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?我问是因为我打算在持续集成环境中
称其为

如果存在,我会对此有所了解,但我不认为存在。
jherran '16

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
不幸的是,自制的二进制clang被打破了。它不包含/usr/local/include文件夹,而基本包含目录,因此所有软件构建均失败。xcode提供的Clang没有fsanitize=leakand ccc-analyzer。因此,mac os上的两个c都被打破了。您必须使用从源代码启用的所有功能来构建它。但是编译会像travis一样杀死您的CI。因此,您只必须为苹果托管和维护单独的CI。苹果仅对简单开发有利,其他任何事情都需要痛苦。
puchu

3

现在足以运行:

brew install llvm

现在clang,该瓶子默认包含。


我们正在寻找能提供一些解释和上下文的长答案。不要仅仅给出一个答案。解释为什么你的答案是正确的,最好是引用。不包含说明的答案可能会被删除。
Tetsujin

@Tetsujin我同意你的观点,但这实际上是一个完整的答案。它充分描述了所需的内容以及原因
Lars Nielsen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.