gpt4 book ai didi

bazel - 如何在 Bazel 中使用 clang++ 而不是 g++

转载 作者:行者123 更新时间:2023-12-04 07:33:41 27 4
gpt4 key购买 nike

我想使用 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更改环境时的服务器。

最佳答案

要指定 Bazel 中的默认 C++ 工具链应使用哪个 C/C++ 编译器,请设置 CC环境变量(例如 CC=clang bazel build //... )。

您可以使用 --repo_env选项,例如--repo_env=CC=clang , 将此默认设置到您的项目或系统范围内 .bazelrc .

默认的 Bazel C++ 工具链使用系统安装的编译器、头文件和库,而不尝试在 BUILD 文件中声明所有相关文件。这是为了简化用户的配置。因此,每当您以 Bazel 不知道的方式修改 C++ 工具链时(升级编译器的主要版本,将符号链接(symbolic link)从 gcc 切换到 clang,更改带有头文件的目录等),您必须运行 bazel clean --expunge刷新缓存并在下次重新运行自动配置。

在 Bazel 中指定 C++ 工具链的可靠解决方案是使用 CcToolchainConfigInfo。请参阅 https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.html 上的文档和 https://docs.bazel.build/versions/master/cc-toolchain-config-reference.html .

关于bazel - 如何在 Bazel 中使用 clang++ 而不是 g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41356173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com