Правила
псевдоним
alias(name, actual, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
Правило alias создаёт другое имя, по которому можно обратиться к правилу.
Псевдонимирование работает только для «обычных» целей. В частности, package_group и test_suite нельзя псевдонимировать.
Псевдонимирование может быть полезно в больших репозиториях, где переименование цели потребовало бы внесения изменений во множество файлов. Также можно использовать правило псевдонима для хранения вызова функции select, если нужно повторно использовать эту логику для нескольких целей.
Правило псевдонима имеет собственное объявление видимости. Во всех других отношениях оно ведет себя так же, как правило, к которому оно относится (например, testonly в псевдониме игнорируется; используется testonly-ность правила-оригинала) с некоторыми незначительными исключениями:
- Тесты не выполняются, если их псевдоним указан в командной строке. Чтобы определить псевдоним, который выполняет связанный тест, используйте правило
test_suiteс одной целью в атрибутеtests. - При определении групп сред псевдонимы для
environmentправил не поддерживаются. Они также не поддерживаются в опции командной строки--target_environment.
Примеры
filegroup(
name = "data",
srcs = ["data.txt"],
)
alias(
name = "other",
actual = ":data",
)
Аргументы
| Атрибуты | |
|---|---|
name | Имя; обязательно Уникальное имя для этой цели. |
actual | Метка; обязательно Цель, к которой относится этот псевдоним. Она не обязательно должна быть правилом, это также может быть входной файл. |
настройка_конфигурации
config_setting(name, constraint_values, define_values, deprecation, distribs, features, flag_values, licenses, tags, testonly, values, visibility)
Соответствует ожидаемому состоянию конфигурации (выраженному как флаги сборки или ограничения платформы) для целей запуска настраиваемых атрибутов. См. select для получения информации о том, как использовать это правило, и Настраиваемые атрибуты для общего обзора функции.
Примеры
Следующее соответствует любой сборке, в которой заданы --compilation_mode=opt или -c opt (явно в командной строке или неявно из файлов .bazelrc):
config_setting(
name = "simple",
values = {"compilation_mode": "opt"}
)
Следующее соответствует любой сборке, нацеленной на ARM и применяющей пользовательское определение FOO=bar (например, bazel build --cpu=arm --define FOO=bar ...):
config_setting(
name = "two_conditions",
values = {
"cpu": "arm",
"define": "FOO=bar"
}
)
Следующее соответствует любой сборке, в которой задан пользовательский флаг --//custom_flags:foo=1 (явно в командной строке или неявно из файлов .bazelrc):
config_setting(
name = "my_custom_flag_is_set",
flag_values = { "//custom_flags:foo": "1" },
)
Следующее соответствует любой сборке, нацеленной на платформу с архитектурой x86_64 и версией glibc 2.25, при условии существования constraint_value с меткой //example:glibc_2_25. Обратите внимание, что платформа по-прежнему соответствует, если она определяет дополнительные значения ограничений помимо этих двух.
config_setting(
name = "64bit_glibc_2_25",
constraint_values = [
"@platforms//cpu:x86_64",
"//example:glibc_2_25",
]
)
config_setting не соответствует флагам командной строки верхнего уровня, оно всё равно может соответствовать некоторым целям сборки. Примечания
- См. select для того, что происходит, когда несколько
config_settingсоответствуют текущему состоянию конфигурации. - Для флагов, которые поддерживают сокращённые формы (например,
--compilation_modeпротив-c), определенияvaluesдолжны использовать полную форму. Они автоматически соответствуют вызовам, использующим любую форму. - Если флаг принимает несколько значений (например,
--copt=-Da --copt=-Dbили список тип флага Starlark),values = { "flag": "a" }соответствует, если"a"присутствует где-либо в фактическом списке.values = { "myflag": "a,b" }работает аналогично: это соответствует--myflag=a --myflag=b,--myflag=a --myflag=b --myflag=c,--myflag=a,b, и--myflag=c,b,a. Точные семантики варьируются в зависимости от флагов. Например,--coptне поддерживает несколько значений в одном случае:--copt=a,bприводит к["a,b"], а--copt=a --copt=bприводит к["a", "b"](поэтомуvalues = { "copt": "a,b" }соответствует первому, но не второму). Но--ios_multi_cpus(для правил Apple) поддерживает:-ios_multi_cpus=a,bиios_multi_cpus=a --ios_multi_cpus=bоба приводят к["a", "b"]. Тщательно проверьте определения флагов и тестируйте свои условия, чтобы проверить точные ожидания. - Если вам нужны условия, которые не моделируются встроенными флагами сборки, используйте флаги, определённые в Starlark. Вы также можете использовать
--define, но это обеспечивает более слабую поддержку и не рекомендуется. См. здесь для получения более подробной информации. - Избегайте дублирования идентичных определений
config_settingв разных пакетах. Вместо этого используйте общийconfig_settingопределённый в стандартном пакете. -
values,define_values, иconstraint_valuesможно использовать в любой комбинации в том жеconfig_settingправиле, но хотя бы одно должно быть установлено для любого данногоconfig_setting.
Аргументы
| Атрибуты | |
|---|---|
name | Имя; обязательно Уникальное имя для этой цели. |
constraint_values | Список меток; не настраиваемый; по умолчанию constraint_values условий, которые должна указать платформа цели, чтобы соответствовать этому config_setting. (Платформа выполнения здесь не учитывается.) Любые дополнительные значения ограничений, которые имеет платформа, игнорируются. См. Настраиваемые атрибуты сборки для получения подробностей. Если два Если два |
define_values | Словарь: Строка -> Строка; не настраиваемый; по умолчанию values, но специально для флага --define.
Это означает:
config_setting(
name = "a_and_b",
values = {
"define": "a=1",
"define": "b=2",
})
не работает, потому что один и тот же ключ (
config_setting(
name = "a_and_b",
define_values = {
"a": "1",
"b": "2",
})
правильно соответствует
|
flag_values | Словарь: метка -> Строка; не настраиваемый; по умолчанию values, но для пользовательских флагов сборки. Это отдельный атрибут, потому что пользовательские флаги упоминаются как метки, в то время как встроенные флаги упоминаются как произвольные строки. |
values | Словарь: Строка -> Строка; не настраиваемый; по умолчанию Это правило наследует конфигурацию настроенной цели, которая ссылается на него в инструкции Для удобства значения конфигурации указываются как флаги сборки (без предшествующего Если флаг не явно установлен в командной строке, используется его значение по умолчанию. Если ключ появляется несколько раз в словаре, используется только последний экземпляр. Если ключ ссылается на флаг, который может быть установлен несколько раз в командной строке (например, |