如何在Mac OS X上更新LLVM和Clang

25

在我使用的Mac OS X版本上(10.7.1(Lion)和Xcode 4.1),LLVM 3.0svn和Clang 2.1已安装。

目前版本为LLVM 3.0和Clang 3.0

Xcode网站上看,最新版本(4.2.1)仍使用LLVM 2.0,这似乎是一个错误。

如果安装了最新版本的Xcode,是否会获得更新版本的LLVM / Clang?

手动安装Clang存在哪些可能的问题?

一旦安装完毕,我的所有IDE(例如NetBeans)是否会自动使用新的Clang?


2
同时请注意,苹果公司使用自己的版本控制系统来管理llvm/clang。因此,Apple LLVM 3.0 / clang 3.0与llvm.org的LLVM 3.0是不同的 :) 后者更为最新。 - Anton Korobeynikov
6个回答

8

您可以使用Homebrew轻松地构建自己的LLVM:

brew install llvm

如果您需要特定版本,也有版本化的软件包:

  • llvm@3.7
  • llvm@3.8
  • llvm@3.9
  • llvm@4

这不再起作用,因为该tap现在为空。$ brew tap homebrew/versions 返回“警告:homebrew/versions已被弃用。此tap现在为空,因为其所有配方都已迁移。”现在还有什么方法可以做到这一点吗? - Brandon H. Gomes

8

软件供应商传统上对于更新构建工具持保守态度,这是有充分理由的。如果你想使用由苹果提供和修改的最新公共支持版本的构建工具,你应该坚持使用最新版本的Xcode,适用于你正在运行的OS X版本。

通常情况下,苹果尚未更新到最新的开源组件的先进版本,原因往往是存在严重的漏洞问题。

如果你不需要由苹果提供的修改,并且不介意生活在边缘(即没有来自苹果的支持,并且可能会重复发现已知问题),并且不打算将编译文件发送到其他人的系统中,那么你可以在例如 /usr/local/bin 或使用第三方软件包管理器如MacPorts http://www.macports.org/ports.php?by=name&substr=clang 中安装自己的版本。但绝对不要试图替换Xcode安装路径下的文件。

值得吗?只有你自己才能决定。


更新:目前适用于OS X 10.7的Xcode 4.3.3拥有一个更新版本的clangApple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn) - Ned Deily
3
苹果公司的版本号与clang版本号不匹配。苹果公司的clang 3.1是基于早于clang 3.1正式发布的源代码构建的。它缺少一些C++11功能,例如初始化列表。他们在4.4DP中将版本号提升到了4.0,但从功能角度来看仍然是clang 3.1级别的。 - Stephen Chu
2
这是FUD,clang的稳定版本相当稳定,其他操作系统如FreeBSD跟踪最新版本。 - jupp0r
我不确定你的FUD评论指的是什么,但FreeBSD和其他操作系统使用哪些版本的clang与我所提出的观点无关。不管好坏,作为Xcode和命令行工具的一部分,苹果提供了自己的clang和其他工具版本,并且这些版本是苹果自己用来构建OS X并支持开发人员使用的。当然,通常情况下,您可以使用其他版本或其他编译器(例如gcc),一切都会很好。但是,当您遇到奇怪的问题或需要特殊选项时,为什么要让生活变得更加困难呢? - Ned Deily
1
因为您可能想要使用 LLVM 发行版中包含但 AppleClang 不包含的功能。例如,我昨天为协程 TS 进行了此操作。 - jupp0r

8
该网站有误。Xcode 4.2.1和4.2包括LLVM 3.0和Clang 3.0:

clang --version
Apple clang version 3.0(tags/Apple/clang-211.12)(基于LLVM 3.0svn)

clang++ --version
Apple clang version 3.0(tags/Apple/clang-211.12)(基于LLVM 3.0svn)

llvm-g++ --version
i686-apple-darwin11-llvm-g++-4.2(GCC)4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.1.00)

llvm-gcc --version
i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.1.00)


我正在使用Xcode 4.4.1,仍然看到:Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn) Target: x86_64-apple-darwin11.4.0 Thread model: posix - James McKinney
我使用的是相同版本的Xcode,但clang --version报告的是:Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn) Target: x86_64-apple-darwin12.1.0 Thread model: posix。也许你还安装了旧版本的Xcode,与4.4.1共存?同时,请检查Xcode偏好设置中的“下载”选项卡,看看是否已安装命令行工具组件。 - Alistair McMillan
@JamesMcKinney 你可能需要在命令行上运行xcode-select,将系统指向安装在你所安装的Xcode版本中的clang版本。 - leecbaker

2
我强烈建议不要在macOS上更换系统编译器:
许多构建过程(例如Xcode)依赖于苹果特定的扩展。例如,据我所知,苹果有自己的链接器。
此外,Linux不强制二进制兼容性 - 通常,人们从源代码构建软件,或为每个操作系统版本下载特定的二进制文件。作为终端用户(而不是开发者/专业用户)操作系统,macOS非常努力地保持与在旧macOS版本上构建的二进制文件的兼容性。
替换编译器,或者更糟糕的是,系统库,将破坏这些兼容性保证。它可能还会以微妙而不明显的方式破坏您的系统。
但是,可以随意在/usr/local或其他位置安装第二个clang副本并探索新功能,但请勿触动系统编译器。
此外,请注意,苹果不支持提交未使用Xcode和其中包含的编译器构建的软件到应用商店。虽然如果你这样做可能不会被注意到,但如果你的编译器未能执行任何苹果编译器执行的操作,你可能会在应用商店审核中被拒绝。

2

OS X更新版本10.9.2(Mavericks)将Xcode升级到5.1(5B130a),Clang也升级至最新的稳定版本(适用于OS X):

clang --version

输出:

Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix

在我的Mac上,llvm-gcc和llvm-g++是指向Clang的符号链接:
lrwxr-xr-x  1 root  wheel     5B 25 Oct 16:48 /usr/bin/llvm-gcc -> clang
lrwxr-xr-x  1 root  wheel     7B 25 Oct 16:48 /usr/bin/llvm-g++ -> clang++

我的最新 R 安装已配置为使用 llvm-gcc-4.2,这会在构建 SHLIB 时导致错误。为了解决这些错误,可以以相同的方式为 llvm-gcc-4.2 和 llvm-g++-4.2 创建符号链接,而不是替换 LLVM 或 CLANG。


1

在安装有Xcode 4.6的10.8.2(Mountain Lion)系统中,版本如下:

$ clang --version

Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

$ clang++ --version

Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

$ llvm-g++ --version

i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ llvm-gcc --version

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

你也可以从App Store或苹果开发者账户直接下载更新Xcode,涵盖命令行工具,这将会更新Clang和LLVM至以上版本。Lion

正如预期的那样,在OSX 10.8.3之后,发布了Xcode 4.6.1,其中包含clang-425.0.27。 - Abhisek Mukherjee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接