bazel:根据os / compiler为所有项目设置c ++标志

时间:2019-02-09 02:03:29

标签: c++ compilation bazel

最近我想将所有项目迁移到bazel,最后我使用针对不同操作系统的命令设置c ++ standard手动构建它们:

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

我会在.bzl文件中设置它,但是Linux和Windows的设置标准是不同的,因此对于MSVC,无论如何我都需要用--cxxopt=/std:c++17覆盖它。 我试图将全局变量添加到.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 个答案:

答案 0 :(得分:0)

改为使用@bazel_tools//src/conditions:windows

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