如何使用 macports 中的 clang-format?

How to use clang-format from macports?

我想使用 clang-format,但我在我的系统中找不到它。我从 macports 安装了 llvm。 install/enable有什么方法吗?

您需要安装 clang 以获取 clang 工具(而 llvm 是 clang 的依赖项,因此您已经完成了一半)。要通过 macports 使用 post 获得最新的稳定版本

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(覆盖文件)。

作为额外的奖励,这是一个很棒的工具,可以帮助测试所有 clang-format 选项的作用:http://zed0.co.uk/clang-format-configurator/

首先使用 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 安装的工具,只需 select none 版本即可。

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

所以 clang-format-mp-8.0 在 /opt/local/bin/ 是那个。