bazel: установить флаги c ++ для всего проекта в зависимости от os / compiler - PullRequest
0 голосов
/ 09 февраля 2019

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

1 Ответ

0 голосов
/ 09 февраля 2019

Используйте @bazel_tools//src/conditions:windows вместо.

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