toolchains |
List of labels
; optional; nonconfigurable Набор целей, к переменным которых этой цели разрешено обращение. Эти цели являются либо экземплярами правил, предоставляющих TemplateVariableInfo , либо специальными целями для типов системных инструментов, встроенных в Bazel. К ним относятся:
-
@bazel_tools//tools/cpp:current_cc_toolchain
-
@bazel_tools//tools/jdk:current_java_runtime
Обратите внимание, что это отличается от понятия переменных Make , которое используется реализациями правил для платформенно-зависимой конфигурации. Вы не можете использовать этот атрибут для определения того, какие конкретные 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 (в ядрах) | Таймаут по умолчанию | | маленький | 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 Помечает тест как ненадёжный. Если установлено, тест выполняется до трех раз, отмечая его как завершившийся с ошибкой только в случае, если он завершается с ошибкой каждый раз. По умолчанию этот атрибут установлен в 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 эквивалентна предоставлению тега «local» (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++ устарели. Пожалуйста, воздержитесь от их использования в других языках, где это возможно. Пока у нас нет пути к устареванию, но они в конечном итоге также устареют.