toolchains |
List of labels
; optional; nonconfigurable Набор целей, к которым этот целевой объект имеет доступ через переменные Make. Эти цели являются экземплярами правил, которые предоставляют TemplateVariableInfo или специальными целями для типов инструментальных цепочек, встроенных в Bazel. Они включают:
-
@bazel_tools//tools/cpp:current_cc_toolchain
-
@bazel_tools//tools/jdk:current_java_runtime
Обратите внимание, что это отличается от концепции разрешения инструментальных цепочек, которая используется реализациями правил для платформенно-зависимой конфигурации. Вы не можете использовать этот атрибут для определения конкретной cc_toolchain или java_toolchain которая будет использоваться целевым объектом. |
visibility |
List of labels
; optional;
default default_visibility from
package if specified, or //visibility:private
otherwise; nonconfigurable Атрибут visibility целевого объекта управляет возможностью использования этого объекта в других пакетах. Смотрите документацию по видимости. |
Атрибуты, общие для всех правил тестирования (*_test)
В этом разделе описаны атрибуты, общие для всех правил тестирования.
| Атрибут | Описание |
args |
List of strings; optional; subject to
$(location) and
"Make variable" substitution, and
Bourne shell tokenization Аргументы командной строки, которые Bazel передаёт целевому объекту при его выполнении с bazel test.
Эти аргументы передаются до любых значений --test_arg , указанных в командной строке bazel test. |
env |
Dictionary of strings; optional; values are subject to
$(location) and
"Make variable" substitution Указывает дополнительные переменные среды, которые должны быть установлены при выполнении теста bazel test. Этот атрибут применяется только к нативным правилам, таким как cc_test, py_test, и sh_test. Он не применяется к правилам тестирования, определённым в Starlark. Для собственных правил Starlark вы можете добавить атрибут "env" и использовать его для заполнения TestEnvironment поставщика. |
env_inherit |
List of strings; optional Указывает дополнительные переменные среды, которые должны быть унаследованы из внешней среды при выполнении теста bazel test. Этот атрибут применяется только к нативным правилам, таким как cc_test, py_test, и sh_test. Он не применяется к правилам тестирования, определённым в Starlark. |
size |
String "enormous", "large" "medium" or "small",
default is "medium"; optional; nonconfigurable Указывает "сложность" целевого объекта теста: сколько времени/ресурсов требуется для его выполнения. Тесты единиц считаются "маленькими", интеграционные тесты "средними", а тесты конца-в-конец "большими" или "огромными". Bazel использует размер для определения таймаута по умолчанию, который может быть переопределён с помощью атрибута timeout. Таймаут относится ко всем тестам в целевом объекте BUILD, а не к каждому отдельному тесту. При выполнении теста локально, size дополнительно используется для целей планирования: Bazel пытается соблюдать --local_{ram,cpu}_resources и не перегружать локальную машину запуском большого количества тяжёлых тестов одновременно. Размеры тестов соответствуют следующим значениям таймаута по умолчанию и предполагаемому максимальному использованию локальных ресурсов: | Размер | ОЗУ (в МБ) | CPU (в ядрах CPU) | Таймаут по умолчанию | | маленький | 20 | 1 | короткий (1 минута) | | средний | 100 | 1 | умеренный (5 минут) | | большой | 300 | 1 | длинный (15 минут) | | огромный | 800 | 1 | вечный (60 минут) | Переменная среды
TEST_SIZE
будет установлена в значение этого атрибута при запуске теста. |
timeout |
String "short", "moderate", "long", "eternal"
(with the default derived from the test's size attribute); nonconfigurable Сколько времени ожидается, что тест будет выполняться, прежде чем вернуть результат. В то время как атрибут размера теста управляет оценкой ресурсов, таймаут теста может быть установлен независимо. Если не указан явно, таймаут основан на размере теста. Таймаут теста может быть переопределён флагом --test_timeout, например, для запуска в определённых медленных условиях. Значения таймаута теста соответствуют следующим временным интервалам: | Значение таймаута | Период времени | | короткий | 1 минута | | умеренный | 5 минут | | длинный | 15 минут | | вечный | 60 минут | Для временных интервалов помимо вышеперечисленных, таймаут теста может быть переопределён флагом Bazel --test_timeout, например, для ручного запуска в известных медленных условиях. Значения --test_timeout задаются в секундах. Например, --test_timeout=120 установит таймаут теста на две минуты. Переменная среды
TEST_TIMEOUT
будет установлена в таймаут теста (в секундах) при запуске теста. |
flaky |
Boolean; optional; default False; nonconfigurable Помечает тест как ненадёжный (flaky). Если установлено, выполняет тест до трёх раз, отмечая его как не пройденный только в случае неудачи каждый раз. По умолчанию этот атрибут установлен в False, и тест выполняется только один раз. Обратите внимание, что использование этого атрибута обычно не рекомендуется - тесты должны проходить надёжно, когда их утверждения выполняются. |
shard_count |
Non-negative integer less than or equal to 50; optional Указывает количество параллельных фрагментов для запуска теста. Это значение переопределит любые эвристики, используемые для определения количества параллельных фрагментов, с которыми следует запустить тест. Обратите внимание, что для некоторых правил тестирования этот параметр может потребоваться для включения фрагментации. Также см. --test_sharding_strategy. Если фрагментация теста включена, переменная среды
TEST_TOTAL_SHARDS
будет установлена в это значение при запуске теста. Фрагментация требует, чтобы тестовый движок поддерживал протокол фрагментации тестов. Если он этого не делает, то, скорее всего, запустит каждый тест в каждом фрагменте, что нежелательно. Подробности о фрагментации см. в Фрагментации тестов в энциклопедии тестов. |
local |
Boolean; default False; nonconfigurable Вынуждает запустить тест локально без изоляции. Установить это в True эквивалентно указанию "локальный" как тега (tags=["local"]). |
Атрибуты, общие для всех правил бинарных файлов (*_binary)
В этом разделе описаны атрибуты, общие для всех правил бинарных файлов.
| Атрибут | Описание |
args |
List of strings; optional; subject to
$(location) and
"Make variable" substitution, and
Bourne shell tokenization;
nonconfigurable Аргументы командной строки, которые Bazel передаст целевому объекту при его выполнении с помощью команды run или в качестве теста. Эти аргументы передаются до аргументов, указанных в командной строке bazel run или bazel test. ПРИМЕЧАНИЕ: Аргументы не передаются при запуске целевого объекта вне Bazel (например, при ручном выполнении бинарного файла в bazel-bin/). |
env |
Dictionary of strings; optional; values are subject to
$(location) and
"Make variable" substitution Указывает дополнительные переменные среды, которые должны быть установлены при выполнении целевого объекта bazel run. Этот атрибут применяется только к нативным правилам, таким как cc_binary, py_binary, и sh_binary. Он не применяется к правилам выполняемых файлов, определённым в Starlark. ПРИМЕЧАНИЕ: Переменные среды не устанавливаются при запуске целевого объекта вне Bazel (например, при ручном выполнении бинарного файла в bazel-bin/). |
output_licenses |
List of strings; optional Лицензии выходных файлов, созданных этим бинарным файлом. Это часть устаревшего API лицензирования, который Bazel больше не использует. Не используйте это. |
Настраиваемые атрибуты
Большинство атрибутов являются "настраиваемыми", что означает, что их значения могут изменяться при построении целевого объекта различными способами. В частности, настраиваемые атрибуты могут изменяться в зависимости от флагов, переданных в командной строке Bazel, или от того, какая зависимость запрашивает целевой объект. Это может быть использовано, например, для настройки целевого объекта для нескольких платформ или режимов компиляции.
В следующем примере объявляются разные источники для различных архитектур целевых объектов. Запуск bazel build :multiplatform_lib --cpu x86 будет строить целевой объект, используя x86_impl.cc, в то время как замена --cpu arm вместо этого вызовет использование arm_impl.cc.
cc_library(
name = "multiplatform_lib",
srcs = select({
":x86_mode": ["x86_impl.cc"],
":arm_mode": ["arm_impl.cc"]
})
)
config_setting(
name = "x86_mode",
values = { "cpu": "x86" }
)
config_setting(
name = "arm_mode",
values = { "cpu": "arm" }
)
Функция select() выбирает среди различных альтернативных значений для настраиваемого атрибута в зависимости от того, какие критерии config_setting или constraint_value конфигурации целевого объекта удовлетворяет.
Bazel вычисляет настраиваемые атрибуты после обработки макросов и перед обработкой правил (технически, между фазами загрузки и анализа). Любая обработка до оценки select() не знает, какой ветви выбирает select(). Макросы, например, не могут изменить своё поведение в зависимости от выбранной ветви, и bazel query может сделать только консервативные предположения о настраиваемых зависимостях целевого объекта. См. эту страницу FAQ для получения более подробной информации об использовании select() с правилами и макросами.
Атрибуты, помеченные nonconfigurable в их документации, не могут использовать эту функцию. Обычно атрибут не является настраиваемым, потому что Bazel внутренне должен знать его значение, прежде чем сможет определить, как разрешить select().
См. Настраиваемые атрибуты сборки для подробного обзора.
Неявные целевые объекты вывода
Неявные выходные целевые объекты в C++ устарели. Пожалуйста, избегайте их использования в других языках, где это возможно. У нас ещё нет пути устаревания, но они в конечном итоге тоже устареют.