Недавно я хотел перенести все свои проекты в bazel, и, наконец, я собираю их вручную с помощью параметра команды c ++ standard для различных операционных систем:
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 ++ для всех проектов в зависимости от платформы (компилятор)?К сожалению, я не смог найти ни одного рабочего примера.Не могли бы вы помочь мне?