用bazel构建时如何设置c ++标准版?

rya*_*ung 11 bazel

我是C++的新手.我知道如何用cmake设置c ++版本,但不知道如何在bazel中设置c ++版本.

也许用copts参数设置cc_libary但我必须在每个cc_libary中设置它?

hlo*_*pko 12

因此,在Bazel中指定c ++工具链的强大解决方案是使用CROSSTOOL文件.您可能会发现有关CROSSTOOL维基页面的信息.为了帮助您入门,您可以阅读使用自定义工具链维基页面构建.要了解Bazel在为您自动生成crosstool时所做的事情,您可以阅读有关自动配置博客文章.要获得有关如何编写功能和action_configs的更多示例,请查看CppActionConfigs.java.

或者,只需build --cxxopt='-std=c++11'输入.bazelrc(存储在您的家中或WORKSPACE文件所在的文件夹中).

  • 有点可笑的是,为“轻松”构建C ++项目而创建的工具甚至不支持最明显的C ++编译器选项。我们不能为我们想做的每件事做一个全新的框架到我们的系统中。真的没有办法在BUILD文件中指定吗? (8认同)
  • 我发现在与 WORKSPACE 文件相同的目录中添加一个内容为 `build --cxxopt='-std=c++17'` 的 .bazelrc 文件就可以解决问题。我认为将这样的配置放在 BUILD 文件中是不合理的,因为它可能会导致跨 BUILD 文件混合 C++ 标准。将其绑定到工作区更有意义,因为一次只能在一个工作区(因此只有一个 C++ 标准)进行构建。 (7认同)
  • 如果您在不同的平台上构建,则使用 --cxxopt 选择 C++ 标准很脆弱。例如 --cxxopt=''-std=c++11" 将在 Linux gcc 中工作,但在 Windows 上使用 bazel 时会失败(它使用 MSVC 并需要 --cxxopt="-std:c++11" (6认同)

小智 9

将其添加到.bazelrc您的旁边WORKSPACE

build --action_env=BAZEL_CXXOPTS="-std=c++20"
Run Code Online (Sandbox Code Playgroud)

如果要设置多个选项,请用冒号分隔它们:

build --action_env=BAZEL_CXXOPTS="-std=c++20:-Werror"
Run Code Online (Sandbox Code Playgroud)

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


顺便说一句:我build --cxxopt=-std=c++20没有.bazelrc工作。


rya*_*ung 5

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

  • 是的,可以通过将“build --cxxopt='-std=c++17'”之类的行添加到与 WORKSPACE 文件位于同一目录中的 .bazelrc 文件中来进行全局设置。 (2认同)