【发布时间】:2016-12-28 09:57:52
【问题描述】:
我想使用clang-format,但在我的系统中找不到它。我从 macports 安装了 llvm。安装/启用的方法是什么?
【问题讨论】:
标签: clang macports clang-format
我想使用clang-format,但在我的系统中找不到它。我从 macports 安装了 llvm。安装/启用的方法是什么?
【问题讨论】:
标签: clang macports clang-format
先用 MacPorts 用命令安装 clang-3.9
sudo port install clang-3.9
之后,您会在 /opt/local/bin 中找到 clang-format-mp-3.9,它应该已经在您的 PATH 中,因此您可以直接使用它。
如果你想让clang等相关工具都指向你刚刚安装的版本,可以使用MacPorts的select机制。
您可以使用port select --list for clang 查看所有可用选项。
$ port select --list clang
Available versions for clang:
mp-clang-3.8
mp-clang-3.9
none (active)
使用sudo port select --set clang <version>,您可以选择其中一个作为新的默认值,这将在/opt/local/bin 中创建不带版本后缀的符号链接。
$ sudo port select --set clang mp-clang-3.9
Selecting 'mp-clang-3.9' for 'clang' succeeded. 'mp-clang-3.9' is now active.
您可以通过查看工具的版本来确认此更改:
$ clang-format --version
clang-format version 3.9.0 (tags/RELEASE_390/final)
如果您以后希望删除这些符号链接以避免隐藏 Xcode 安装的工具,只需选择 none 版本。
【讨论】:
你需要安装 clang 来获取 clang 工具(而 llvm 是 clang 的一个依赖,所以你已经成功了一半)。要通过 macports 获取截至本文的最新稳定版本,请使用
sudo port install clang-3.9
现在对我来说,clang-format 安装在/opt/local/libexec/llmv-3.9/bin 中。在这里您还可以找到所有其他的 clang 工具,例如 clang-tidy。
为简单起见,我在我的 bash 配置文件中创建了一个别名,因为我不喜欢 Apple 的 fmt 命令:alias fmt ='/opt/local/libexec/llmv-3.9/bin/clang-format'。因此fmt -i file.c 现在使用我在.clang-format 文件中选择的样式运行clang-format inplace(覆盖文件)。
作为额外的奖励,这是一个很棒的工具,可以帮助测试所有 clang 格式选项的功能:http://zed0.co.uk/clang-format-configurator/
【讨论】:
port contents clang-3.9,返回的一堆东西是什么?此外,您移植安装了哪个版本的 llvm?如果您有 llvm-3.9,则使用该命令,如果您有 llvm-$(version),则使用 port contents clang-$(version)。如果您安装了东西,请告诉我 port contents clang-3.9 | grep "/opt/local/libexec/llvm-3.9/bin" 返回的内容。如果第一个命令返回结果,但第二个命令没有返回结果,那么由于某种原因,clang 工具没有安装在我认为它们应该在的位置。
find /opt/local -name "clang-format" 如果没有返回任何内容,您可能无法使用 macports 构建 clang。另一种可能性是您自定义安装了 macports 并更改了默认路径,以便不在 /opt/local 中完成安装。
/opt/local/libexec/llmv-3.9/bin。 这并不意味着您拥有或应该拥有clang工具。当您安装clang时,它也会使用相同的目录。
clang的最新版本是8.0:
$ sudo port install clang-8.0
$ clang
clang clang-check-mp-7.0 clang-format-mp-8.0 clang-offload-bundler-mp-7.0 clang-reorder-fields-mp-7.0
clang++ clang-check-mp-8.0 clang-func-mapping-mp-7.0 clang-offload-bundler-mp-8.0 clang-reorder-fields-mp-8.0
clang++-mp-7.0 clang-cl-mp-7.0 clang-import-test-mp-7.0 clang-query-mp-7.0 clang-tidy-mp-7.0
clang++-mp-8.0 clang-cl-mp-8.0 clang-import-test-mp-8.0 clang-query-mp-8.0 clang-tidy-mp-8.0
clang-apply-replacements-mp-7.0 clang-cpp-mp-7.0 clang-include-fixer-mp-7.0 clang-refactor-mp-7.0 clangd-mp-7.0
clang-apply-replacements-mp-8.0 clang-cpp-mp-8.0 clang-include-fixer-mp-8.0 clang-refactor-mp-8.0 clangd-mp-8.0
clang-change-namespace-mp-7.0 clang-extdef-mapping-mp-8.0 clang-mp-7.0 clang-rename-mp-7.0 clangd-xpc-test-client-mp-8.0
clang-change-namespace-mp-8.0 clang-format-mp-7.0 clang-mp-8.0 clang-rename-mp-8.0
所以 /opt/local/bin/ 的 clang-format-mp-8.0 就是一个。
【讨论】: