最近,我想将所有的项目迁移到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++ 标志以应用于所有相关项目?遗憾的是,我没有找到任何可行的示例。请问您能否帮忙?