如何在 Zesty 中将 Clang 3.9 设置为默认值?

Nat*_*man 6 clang 17.04

Zesty 附带多个版本的 Clang。该安装叮当声包依赖于clang-3.9安装 clang-3.9clang-4.0安装 clang-4.0. 似乎默认使用 Clang 4:

$ clang --version
clang version 4.0.0-1ubuntu1 (tags/RELEASE_400/rc1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Run Code Online (Sandbox Code Playgroud)

但是,我需要 Clang 3.9 作为默认版本。由于以下原因,我无法编译 UnrealEngine:

UnrealBuildTool Exception: ERROR: This version of the Unreal Engine can only be
    compiled with clang 3.9, 3.8, 3.7, 3.6 and 3.5. clang 4.0.0 may not build it -
    please use a different version.
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

sma*_*c89 11

为了建立在公认的答案上,如果您有多个版本的 clang,那么clang++依赖它可能符合您的最大利益,clang因此您需要做的就是将 clang 更新为不同的版本,并且 clang++ 的版本也随之而来。

您可以使用--slave选项执行此操作update-alternatives。所以像这样:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.9 100 \
   --slave /usr/bin/clang++ clang++ /usr/bin/clang++-3.9
Run Code Online (Sandbox Code Playgroud)

您当然可以为其他版本执行此操作:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-4.0 100 \
   --slave /usr/bin/clang++ clang++ /usr/bin/clang++-4.0

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-5.0 100 \
   --slave /usr/bin/clang++ clang++ /usr/bin/clang++-5.0
Run Code Online (Sandbox Code Playgroud)

要切换版本,您只需键入:

sudo update-alternatives --config clang
Run Code Online (Sandbox Code Playgroud)

输入选择两者clangclang++会自动切换到相同的版本。

同样的想法适用于GCC如果您也有多个版本,则可以使用此方法来配置gccg++.

错误:

更新替代:错误:替代 clang++ 不能成为 clang 的奴隶:它是主替代

当您尝试运行上述命令时,您可能会收到此错误。不用担心,这只是意味着您已经将clang++其配置为自己的替代方案,因此您需要在上述方法生效之前删除该替代方案。您可以使用以下命令执行此操作:

sudo update-alternatives --remove clang++ /usr/bin/clang++-3.9
Run Code Online (Sandbox Code Playgroud)

对每个版本的 clang++ 执行此操作,然后将它们全部删除后,再试一次。

资料来源:


Nat*_*man 8

这个答案为我指明了正确的方向:

sudo update-alternatives --install \
    /usr/bin/clang++ clang++ /usr/lib/llvm-3.9/bin/clang++ 100
sudo update-alternatives --install \
    /usr/bin/clang clang /usr/lib/llvm-3.9/bin/clang 100
Run Code Online (Sandbox Code Playgroud)

运行这两个命令后,构建能够继续。