Bazel:根据操作系统/编译器为所有依赖于其的项目设置C++标志

4

最近,我想将所有的项目迁移到bazel,并且终于通过手动设置不同操作系统的c++标准来构建它们:

bazel build //... --cxxopt=-std=c++17 --compilation_mode opt
bazel build //... --cxxopt=/std:c++17 --compilation_mode opt

我会把它放在.bzl文件中,但是在Linux和Windows上设置标准的方式不同,所以我仍然需要使用--cxxopt=/std:c++17来覆盖它的设置(对于MSVC)。 我尝试在.bzl文件中添加全局变量,并为所有项目加载它,例如:

# variables.bzl
COPTS = ["-std=c++17"]

这个方法是可行的(但正如我之前提到的,它无论如何都需要针对不同的平台进行更改)。

然后我尝试了:

# variables.bzl
COPTS = select({
        "//tools/cc_target_os:windows": ["/std:c++17"],
        "//conditions:default": ["-std=c++17"],
})

但是这会导致错误:
ERROR: path/to/project/BUILD:2:1: no such package 'tools/cc_target_os': BUILD file not found on package path and referenced by '//project:smth'

是否可以根据平台(编译器)设置 C++ 标志以应用于所有相关项目?遗憾的是,我没有找到任何可行的示例。请问您能否帮忙?

1个回答

2
请使用@bazel_tools//src/conditions:windows代替"Original Answer"。
# variables.bzl
COPTS = select({
        "@bazel_tools//src/conditions:windows": ["/std:c++17"],
        "//conditions:default": ["-std=c++17"],
})

这将会影响到使用 MinGW 和交叉编译的过程。 - user836218

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接