Spec-Zone.ru › Bazel 6.0

Общие определения

В этом разделе определены различные термины и концепции, общие для многих функций или правил сборки.

Содержание

  • Токенизация оболочки Bourne
  • Расширение меток
  • Типичные атрибуты, определяемые большинством правил сборки
  • Атрибуты, общие для всех правил сборки
  • Атрибуты, общие для всех правил тестирования (*_test)
  • Атрибуты, общие для всех правил бинарных файлов (*_binary)
  • Настраиваемые атрибуты
  • Неявные выходные цели

Токенизация оболочки Bourne

Некоторые строковые атрибуты некоторых правил разделяются на несколько слов в соответствии с правилами токенизации оболочки Bourne: необрамлённые пробелы разделяют отдельные слова, а одинарные и двойные кавычки, а также обратная косая черта используются для предотвращения токенизации.

Атрибуты, которые подвергаются этой токенизации, явно указаны в их определениях в этом документе.

Атрибуты, подверженные расширению переменных «Make» и токенизации оболочки Bourne, обычно используются для передачи произвольных параметров компиляторам и другим инструментам. Примеры таких атрибутов — cc_library.copts и java_library.javacopts. Вместе эти подстановки позволяют одной строковой переменной расширяться в список параметров, специфичных для конфигурации.

Расширение меток

Некоторые строковые атрибуты очень немногих правил подвержены расширению меток: если эти строки содержат действительную метку в качестве подстроки, например, //mypkg:target, и эта метка является объявленной предпосылкой текущего правила, она расширяется в путь к файлу, представленному целью //mypkg:target.

Примеры атрибутов включают genrule.cmd и cc_binary.linkopts. Подробности могут значительно различаться в каждом случае, по таким вопросам, как: расширяются ли относительные метки; как обрабатываются метки, которые расширяются до нескольких файлов и т. д. Обратитесь к документации атрибута правила для получения подробной информации.

Типичные атрибуты, определяемые большинством правил сборки

В этом разделе описываются атрибуты, которые определены многими правилами сборки, но не всеми.

Атрибут Описание
data

List of labels ; optional

Файлы, необходимые этому правилу во время выполнения. Может перечислять файлы или цели правил. В целом позволяет перечислять любые цели.

Выходные данные по умолчанию и файлы во время выполнения целей в атрибуте data должны отображаться в области *.runfiles любого исполняемого файла, который является результатом этой цели или имеет зависимость от её времени выполнения. Это может включать файлы данных или двоичные файлы, используемые при выполнении srcs этой цели. См. раздел зависимости данных для получения дополнительной информации о том, как зависеть от файлов данных и использовать их.

Новые правила должны определять атрибут data, если они обрабатывают входные данные, которые могут использовать другие входные данные во время выполнения. Функции реализации правил также должны заполнить файлы во время выполнения цели из выходных данных и файлов во время выполнения любого атрибута data, а также файлов во время выполнения из любого атрибута зависимости, который предоставляет исходный код или зависимости во время выполнения.

deps

List of labels ; optional

Зависимости для этой цели. В целом следует перечислять только цели правил. (Хотя некоторые правила позволяют перечислять файлы непосредственно в deps, это следует избегать, когда это возможно.)

Правила, специфичные для языка программирования, обычно ограничивают перечисленные цели теми, которые имеют определенные провайдеры.

Точные семантики того, что означает, когда одна цель зависит от другой, используя deps, специфичны для типа правила, и документация, специфичная для правила, описывает это подробнее. Для правил, обрабатывающих исходный код, deps обычно определяет зависимости исходного кода, используемые кодом в srcs.

Чаще всего зависимость deps используется для того, чтобы один модуль мог использовать символы, определённые в другом модуле, написанном на том же языке программирования и скомпилированном отдельно. Межъязыковые зависимости также разрешены во многих случаях: например, цель java_library может зависеть от кода C++ в цели cc_library, перечислив последнюю в атрибуте deps. См. определение зависимостей для получения дополнительной информации.

licenses

List of strings; optional; nonconfigurable

Список строк типов лицензий, которые следует использовать для этой конкретной цели. Это часть устаревшего API лицензирования, который Bazel больше не использует. Не используйте это.

srcs

List of labels ; optional

Файлы, обрабатываемые или включаемые этим правилом. Обычно перечисляет файлы напрямую, но может перечислять цели правил (например, filegroup или genrule) для включения их выходных данных по умолчанию.

Правила, специфичные для языка программирования, часто требуют, чтобы перечисленные файлы имели определённые расширения файлов.

Атрибуты, общие для всех правил сборки

В этом разделе описываются атрибуты, которые неявно добавляются ко всем правилам сборки.

Атрибут Описание
compatible_with

List of labels ; optional; nonconfigurable

Список сред, для которых этот целевой объект может быть скомпилирован, помимо поддерживаемых по умолчанию сред.

Это часть системы ограничений Bazel, которая позволяет пользователям объявлять, на какие целевые объекты могут и не могут ссылаться другие целевые объекты. Например, внешне развертываемые двоичные файлы не должны зависеть от библиотек с конфиденциальным кодом компании. Подробности см. в ConstraintSemantics.

deprecation

String; optional; nonconfigurable

Объяснительное предупреждение, связанное с этим целевым объектом. Обычно это используется для уведомления пользователей о том, что целевой объект устарел или был заменен другой задачей, является частным для пакета или, возможно, считается вредным по какой-либо причине. Желательно включить ссылку (например, на веб-страницу, номер ошибки или примеры миграционных изменений CL), чтобы можно было легко узнать о необходимых изменениях для предотвращения сообщения. Если существует новый целевой объект, который может быть использован как замена, рекомендуется просто переместить всех пользователей старого целевого объекта.

Этот атрибут не влияет на способ построения, но может повлиять на вывод диагностики инструмента сборки. Инструмент сборки выдает предупреждение, когда на задачу с атрибутом deprecation ссылается целевой объект в другом пакете.

Внутрипакетные зависимости исключены из этого предупреждения, так что, например, сборка тестов устаревшей задачи не приведет к появлению предупреждения.

Если устаревший целевой объект зависит от другого устаревшего целевого объекта, сообщение об ошибке не выдается.

После того, как люди перестанут его использовать, целевой объект можно удалить.

distribs

List of strings; optional; nonconfigurable

Список строк методов распространения, используемых для этого целевого объекта. Это часть устаревшего API лицензирования, который Bazel больше не использует. Не используйте это.

exec_compatible_with

List of labels ; optional; nonconfigurable

Список constraint_values которые должны быть присутствовать в платформе выполнения для этого целевого объекта. Это помимо любых ограничений, уже установленных типом правила. Ограничения используются для ограничения списка доступных платформ выполнения. Подробнее см. описание разрешения инструментария.

exec_properties

Dictionary of strings; optional

Словарь строк, которые будут добавлены к exec_properties платформы, выбранной для этого целевого объекта. См. exec_properties правила платформы.

Если ключ присутствует как в свойствах платформы, так и в свойствах целевого объекта, значение будет взято из целевого объекта.

features

List of feature strings; optional

Функция — это строковый тег, который можно включить или выключить для целевого объекта. Значение функции зависит от самого правила.

Этот атрибут features объединяется с атрибутом уровня пакета features. Например, если функции ["a", "b"] включены на уровне пакета, а атрибут features целевого объекта содержит ["-a", "c"], функции, включенные для правила, будут "b" и "c". Пример.

restricted_to

List of labels ; optional; nonconfigurable

Список сред, для которых этот целевой объект может быть скомпилирован, вместо поддерживаемых по умолчанию сред.

Это часть системы ограничений Bazel. Подробности см. в compatible_with.

tags

List of strings; optional; nonconfigurable

Теги могут быть применены к любому правилу. Теги для правил тестирования и test_suite правил полезны для категоризации тестов. Теги для целевых объектов, не являющихся тестами, используются для управления запущенными в песочнице выполнения genrule и действиями Starlark, а также для разбора человеком и/или внешними инструментами.

Bazel изменяет поведение своего кода песочницы, если находит следующие ключевые слова в атрибуте tags любого правила тестирования или genrule целевого объекта, или ключи execution_requirements для любого действия Starlark.

  • no-sandbox ключевое слово приводит к тому, что действие или тест никогда не запускаются в песочнице; он по-прежнему может кэшироваться или выполняться удаленно — используйте no-cache или no-remote, чтобы предотвратить любой или оба из этих вариантов.
  • no-cache ключевое слово приводит к тому, что действие или тест никогда не кэшируются (удаленно или локально)
  • no-remote-cache ключевое слово приводит к тому, что действие или тест никогда не кэшируются удаленно (но может кэшироваться локально; также может выполняться удаленно). Примечание: для целей этого тега кэш диска считается локальным кэшем, а кэши http и gRPC — удаленными. Если указан комбинированный кэш (т. е. кэш с локальными и удаленными компонентами), он обрабатывается как удаленный кэш и полностью отключается, если --incompatible_remote_results_ignore_disk установлен, в этом случае будут использоваться локальные компоненты.
  • no-remote-exec ключевое слово приводит к тому, что действие или тест никогда не выполняются удаленно (но может кэшироваться удаленно).
  • no-remote ключевое слово предотвращает выполнение действия или теста удаленно или кэширование удаленно. Это эквивалентно использованию и no-remote-cache и no-remote-exec.
  • no-remote-cache-upload ключевое слово отключает часть загрузки удаленного кэширования спауна. Он не отключает удаленное выполнение.
  • local ключевое слово препятствует удаленному кэшированию, удаленному выполнению или запуску действия или теста в песочнице. Для genrules и тестов маркировка правила с помощью атрибута local = True имеет тот же эффект.
  • requires-network ключевое слово позволяет получить доступ к внешней сети изнутри песочницы. Этот тег имеет эффект только в том случае, если песочница включена.
  • block-network ключевое слово блокирует доступ к внешней сети изнутри песочницы. В этом случае разрешена только связь с локальной машиной. Этот тег имеет эффект только в том случае, если песочница включена.
  • requires-fakeroot выполняет тест или действие как пользователь и группа 0 (т. е. суперпользователь). Поддерживается только на Linux. Этот тег имеет приоритет над опцией командной строки --sandbox_fake_username.

Теги для тестов обычно используются для аннотирования роли теста в процессе отладки и выпуска. Как правило, теги наиболее полезны для тестов C++ и Python, которые не имеют возможности аннотации во время выполнения. Использование тегов и элементов размера обеспечивает гибкость в формировании наборов тестов на основе политики контроля кода.

Bazel изменяет поведение запуска тестов, если находит следующие ключевые слова в атрибуте tags правила теста:

  • exclusive заставит тест выполняться в «эксклюзивном» режиме, гарантируя, что другие тесты не выполняются одновременно. Такие тесты будут выполняться последовательно после завершения всех задач сборки и тестов, не являющихся эксклюзивными. Удаленное выполнение отключено для таких тестов, потому что Bazel не контролирует, что выполняется на удаленной машине.
  • exclusive-if-local заставит тест выполняться в «эксклюзивном» режиме, если он выполняется локально, но выполнит тест параллельно, если он выполняется удаленно.
  • manual ключевое слово исключит целевой объект из расширения шаблонов целевых объектов (..., :*, :all, и т. д.) и правил test_suite, которые не перечисляют тест явно при вычислении набора целевых объектов верхнего уровня для build, test, и coverage команд. Он не влияет на расширение шаблонов целевых объектов или наборов тестов в других контекстах, включая команду query. Обратите внимание, что manual не подразумевает, что целевой объект не должен автоматически собираться/проверяться системами непрерывной сборки/тестирования. Например, может быть желательно исключить целевой объект из bazel test ... потому что он требует определенных флагов Bazel, но все равно включать его в правильно настроенные предсборки или непрерывные тестовые прогоны.
  • external ключевое слово принудительно выполнит тест (независимо от --cache_test_results значение).
См. Конвенции тегов в Энциклопедии тестов для получения дополнительных сведений о соглашениях по тегам, прикрепленным к целевым объектам тестов.
target_compatible_with

List of labels ; optional

Список constraint_value которые должны присутствовать в целевой платформе для того, чтобы этот целевой объект считался совместимым. Это дополнительно к любым ограничениям, уже установленным типом правила. Если целевая платформа не удовлетворяет всем перечисленным ограничениям, то целевой объект считается несовместимым. Несовместимые целевые объекты пропускаются при сборке и тестировании при расширении шаблона целевых объектов (например, //..., :all). При явном указании в командной строке несовместимые целевые объекты заставляют Bazel вывести сообщение об ошибке и привести к сбою сборки или тестирования.

Целевые объекты, которые транзитивно зависят от несовместимых целевых объектов, сами по себе считаются несовместимыми. Они также пропускаются при сборке и тестировании.

Пустой список (который является значением по умолчанию) означает, что целевой объект совместим со всеми платформами.

Все правила, кроме правил рабочей области, поддерживают этот атрибут. Для некоторых правил этот атрибут не имеет эффекта. Например, указание target_compatible_with для cc_toolchain не имеет смысла.

См. страницу Платформы для получения дополнительной информации о пропуске несовместимых целевых объектов.

testonly

Boolean; optional; default False except for test and test suite targets; nonconfigurable

Если True, то только целевые объекты testonly (например, тесты) могут зависеть от этого целевого объекта.

Эквивалентно, правило, которое не testonly, не может зависеть от любого правила, которое testonly.

Тесты (*_test правила) и наборы тестов (test_suite правила) являются testonly по умолчанию.

Этот атрибут предназначен для того, чтобы целевой объект не содержался в двоичных файлах, которые выпускаются для производства.

Поскольку testonly применяется во время сборки, а не во время выполнения, и распространяется вирусно через дерево зависимостей, его следует применять с осторожностью. Например, заглушки и фикстуры, которые полезны для unit-тестов, также могут быть полезны для интеграционных тестов, включающих те же двоичные файлы, которые будут выпущены в производство, и, следовательно, их, вероятно, не следует помечать testonly. Напротив, правила, которые опасны даже для подключения, возможно, потому что они безусловно переопределяют стандартное поведение, определенно должны быть помечены testonly.

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 и не перегружать локальную машину, запуская большое количество тяжелых тестов одновременно.

Размеры тестов соответствуют следующим значениям таймаутов по умолчанию и предполагаемым пиковым значениям локальных ресурсов:

Размер ОЗУ (в МБ) ЦП (в ядрах ЦП) Таймаут по умолчанию
небольшой 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 эквивалентна предоставлению тега «локальный» (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, в то время как замена x86_impl.cc вместо этого заставит его использовать 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 может делать только консервативные предположения о настраиваемых зависимостях целевого объекта. См. эту часто задаваемый вопрос для получения более подробной информации об использовании select() с правилами и макросами.

Атрибуты, помеченные как nonconfigurable в их документации, не могут использовать эту функцию. Обычно атрибут не настраивается, потому что Bazel внутренне должен знать его значение, прежде чем сможет определить, как разрешить select().

См. Настраиваемые атрибуты сборки для получения подробного обзора.

Неявные целевые выходные данные

Неявные выходные данные в C++ устарели. Пожалуйста, воздерживайтесь от их использования в других языках, где это возможно. У нас пока нет пути устаревания, но они также будут в конечном итоге устареть.

Когда вы определяете правило сборки в файле BUILD, вы явно объявляете новую, именованную цель правила в пакете. Многие функции правил сборки также неявным образом подразумевают одну или несколько выходных файлов-целей, содержимое и смысл которых зависят от правила. Например, когда вы явно объявляете правило java_binary(name='foo', ...) , вы также неявным образом объявляете выходной файл-цель foo_deploy.jar как член того же пакета. (Эта конкретная цель представляет собой автономный Java-архив, подходящий для развертывания.)

Неявные выходные цели являются полноправными членами глобального графа целей. Как и другие цели, они строятся по запросу, либо когда они указаны в команде сборки верхнего уровня, либо когда они необходимы в качестве предварительных условий для других целей сборки. Они могут быть упомянуты как зависимости в файлах BUILD и могут быть просмотрены в выводе таких инструментов анализа, как bazel query.

Для каждого типа правила сборки документация правила содержит специальный раздел, подробно описывающий имена и содержимое любых неявных выходов, подразумеваемых объявлением данного типа правила.

Важное, но несколько тонкое различие между двумя пространствами имён, используемыми системой сборки: метки идентифицируют цели, которые могут быть правилами или файлами, и файлы-цели могут быть разделены на файлы-цели исходного кода (или входные файлы) и производные (или выходные) файлы-цели. Это то, что вы можете упомянуть в файлах BUILD, собрать с командной строки или просмотреть с помощью bazel query; это пространство имён целей. Каждая цель файла соответствует одному фактическому файлу на диске (пространство имён «файловой системы»); каждая цель правила может соответствовать нулю, одному или нескольким фактическим файлам на диске. На диске могут быть файлы, которым не соответствует ни одна цель; например, .o файлы-объекты, созданные во время компиляции C++, не могут быть упомянуты в файлах BUILD или с командной строки. Таким образом, инструмент сборки может скрывать некоторые детали реализации того, как он выполняет свою работу. Это более подробно объясняется в справочнике по концепциям BUILD.

За исключением случаев, когда указано иное, содержимое этой страницы лицензируется по лицензии Creative Commons Attribution 4.0, а примеры кода лицензированы по лицензии Apache 2.0. Подробнее см. политики Google для разработчиков. Java — зарегистрированный товарный знак Oracle и/или её аффилированных компаний.

Последнее обновление 2022-12-19 UTC.

Licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License.
https://bazel.build/versions/6.0.0/reference/be/common-definitions

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API