首页 > 解决方案 > 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++17MSVC 覆盖它。我尝试将全局变量添加到.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++ 标志?不幸的是,我找不到任何工作示例。请你帮助我好吗?

标签: c++compilationbazel

解决方案


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

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

推荐阅读