c++ - bazel:根据操作系统/编译器为所有项目设置 c++ 标志
问题描述
最近我想将我所有的项目迁移到 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++ 标志?不幸的是,我找不到任何工作示例。请你帮助我好吗?
解决方案
改为使用@bazel_tools//src/conditions:windows
。
# variables.bzl
COPTS = select({
"@bazel_tools//src/conditions:windows": ["/std:c++17"],
"//conditions:default": ["-std=c++17"],
})