最近我想将所有项目迁移到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 ++标志? 不幸的是,我找不到任何可行的例子。 你能帮我吗?
答案 0 :(得分:0)
改为使用@bazel_tools//src/conditions:windows
。
# variables.bzl
COPTS = select({
"@bazel_tools//src/conditions:windows": ["/std:c++17"],
"//conditions:default": ["-std=c++17"],
})