使用 Bazel 构建时如何设置 C++ 标准版本?

How to set C++ standard version when build with Bazel?

我对 C++ 有点陌生。我知道如何用CMake设置C++版本,但不知道如何在Bazel中设置C++版本。

也许可以在 cc_libary 中使用 copts 参数进行设置,但我必须在每个 cc_libary?

中进行设置

bazel build --cxxopt='-std=c++11' main:hello-world 这可行,但我想知道是否有办法全局设置此 cxxopt,例如 CMAKE_CXX_FLAGS.

要使用 Bazel 中的默认 C++ 工具链设置标准,您可以设置环境变量 BAZEL_CXXOPTS,例如BAZEL_CXXOPTS="-std=c++14"。您还可以从命令行或使用 --repo_env=BAZEL_CXXOPTS.bazelrc 设置它。 : 是标志分隔符。

或者,您可以将 --cxxopt 传递给 Bazel,或将其放入 .bazelrc,例如--cxxopt='-std=c++11'.

在 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 处的文档。

将此添加到 .bazelrc 旁边 WORKSPACE:

build --action_env=BAZEL_CXXOPTS="-std=c++20"

如果要设置多个选项,用冒号隔开:

build --action_env=BAZEL_CXXOPTS="-std=c++20:-Werror"

这是一种解决方法,因为 bazel 设置了一个环境变量,然后 bazel 使用它。但它有效。


顺便说一句:.bazelrc 中的 build --cxxopt=-std=c++20 对我不起作用。