如何在 Bazel 中使用 clang++ 而不是 g++
how to use clang++ instead g++ in 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
服务器。
要指定哪个 C/C++ 编译器,Bazel 中的默认 C++ 工具链应使用设置 CC
环境变量(例如 CC=clang bazel build //...
)。
您可以使用 --repo_env
选项,例如--repo_env=CC=clang
,将此默认值放入您的项目中 - 或 system-wide .bazelrc
。
默认的 Bazel C++ 工具链使用系统安装的编译器、headers 和库,而不尝试在 BUILD 文件中声明所有相关文件。这是为了简化用户的配置。因此,每当您以 Bazel 无法知道的方式修改 C++ 工具链(升级编译器的主要版本、将符号链接从 gcc 切换到 clang、使用 headers 更改目录等)时,您必须 运行 bazel clean --expunge
刷新缓存并在下次重新运行 自动配置。
在 Bazel 中指定 C++ 工具链的可靠解决方案是使用 CcToolchainConfigInfo。请参阅 https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.html and https://docs.bazel.build/versions/master/cc-toolchain-config-reference.html 处的文档。
我想使用 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
服务器。
要指定哪个 C/C++ 编译器,Bazel 中的默认 C++ 工具链应使用设置 CC
环境变量(例如 CC=clang bazel build //...
)。
您可以使用 --repo_env
选项,例如--repo_env=CC=clang
,将此默认值放入您的项目中 - 或 system-wide .bazelrc
。
默认的 Bazel C++ 工具链使用系统安装的编译器、headers 和库,而不尝试在 BUILD 文件中声明所有相关文件。这是为了简化用户的配置。因此,每当您以 Bazel 无法知道的方式修改 C++ 工具链(升级编译器的主要版本、将符号链接从 gcc 切换到 clang、使用 headers 更改目录等)时,您必须 运行 bazel clean --expunge
刷新缓存并在下次重新运行 自动配置。
在 Bazel 中指定 C++ 工具链的可靠解决方案是使用 CcToolchainConfigInfo。请参阅 https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.html and https://docs.bazel.build/versions/master/cc-toolchain-config-reference.html 处的文档。