如何在Bazel中使用clang ++代替g ++

时间:2016-12-28 05:56:30

标签: bazel

我想使用clang ++而不是g ++来编译我的c ++文件,而g ++是系统的默认编译器。

我已尝试sudo update-alternatives --install c++ c++ /home/guo/bin/clang++ 100并设置CC环境。但它们不起作用。 Bazel仍然使用g ++作为编译器。

<小时/> 一个小时后,Bazel使用了clang ++。但是发生了错误。

ERROR: /home/guo/utils/lib/BUILD:2:1: C++ compilation of rule '//utils/lib:get_pdf' failed: linux-sandbox failed: error executing command /home/guo/.cache/bazel/_bazel_guo/d2d93a82f24e8dc5485ac1b29928428e/execroot/_bin/linux-sandbox ... (remaining 41 argument(s) skipped).
src/main/tools/linux-sandbox-pid1.cc:592: "execvp(/home/guo/lib/clang, 0x23abde0)": Permission denied
Target //utils/lib:get_pdf failed to buildenter code here
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.159s, Critical Path: 0.06s

Ps:/home/guo/lib/clang是一个目录,而不是我计算机中的二进制文件。我想这里应该是/home/guo/bin/clang++,但我不知道如何让Bazel知道它。

<小时/> Ps:当您更改环境时,似乎需要重新启动Bazel服务器。

1 个答案:

答案 0 :(得分:4)

因此,为Bazel配置C ++工具链的正确方法是使用CROSSTOOL。因为那是nontrivial endeavor,Bazel会尝试使用cc_configure.bzl脚本自动检测您的工具链。此脚本检查一些环境变量,如果存在,它将使用那里的值。要配置gcc,您可以设置CC变量,Bazel会接受它(in _find_cc function)。

在缓存这些结果时,运行bazel clean --expunge以刷新缓存并在下次重新运行自动配置。