Содержание
package
package(default_deprecation, default_testonly, default_visibility, features)
Эта функция объявляет метаданные, которые применяются ко всем последующим правилам в пакете. Она используется не более одного раза в рамках пакета (файл BUILD).
Функция package() должна вызываться сразу после всех инструкций load() в начале файла, до любого правила.
Аргументы
| Атрибут | Описание |
|---|---|
default_visibility |
Умолчательный уровень видимости правил в этом пакете. Каждое правило в этом пакете имеет видимость, заданную в этом атрибуте, если явно не указано иное в атрибуте |
default_deprecation |
Устанавливает значение по умолчанию для |
default_testonly |
Устанавливает значение по умолчанию для свойства В пакетах под |
features |
Устанавливает различные флаги, влияющие на семантику этого файла BUILD. Эта функция в основном используется людьми, работающими над системой сборки, для маркировки пакетов, которые требуют какого-либо специального обработки. Не используйте её, если вас об этом не попросили люди, работающие над системой сборки. |
Примеры
Следующее объявление указывает, что правила в этом пакете видимы только членам группы пакетов //foo:target. Индивидуальные объявления видимости правила, если они присутствуют, переопределяют это указание.
package(default_visibility = ["//foo:target"])
Группа пакетов
package_group(name, packages, includes)
Эта функция определяет набор пакетов и связывает метку с этим набором. Метка может быть использована в атрибутах visibility
Группы пакетов в первую очередь используются для управления видимостью. Публично видимая цель может быть использована в любом пакете в дереве исходных кодов. Приватно видимая цель может быть использована только в рамках своего собственного пакета (не подпакетов). Между этими крайностями, цель может разрешить доступ к своему пакету плюс любым из пакетов, описанных одним или несколькими группами пакетов. Более подробное объяснение системы видимости см. в атрибуте visibility.
Данный пакет считается частью группы, если он соответствует атрибуту packages, или уже содержится в одной из других групп пакетов, упомянутых в атрибуте includes
Группы пакетов технически являются целями, но не создаются правилами и сами по себе не имеют защиты видимости.
Аргументы
| Атрибут | Описание |
|---|---|
name |
Уникальное имя для этой цели. |
packages |
Список из нуля или более спецификаций пакетов. Каждая строка спецификации пакета может иметь один из следующих форматов:
Кроме того, первые два типа спецификаций пакетов также могут быть префиксены с Группа пакетов содержит любой пакет, который соответствует хотя бы одному из его положительных спецификаций и ни одной из его отрицательных спецификаций. Например, значение Помимо публичной видимости, нет способа напрямую указать пакеты за пределами текущего репозитория. Если этот атрибут отсутствует, он эквивалентен заданию пустого списка, что также эквивалентно заданию списка, содержащего только Примечание: До Bazel 6.0 спецификация Примечание: До Bazel 6.0, при сериализации этого атрибута как части |
includes |
Другие группы пакетов, которые включены в эту. Метки в этом атрибуте должны ссылаться на другие группы пакетов. Пакеты в ссылающихся группах пакетов считаются частью этой группы пакетов. Это транзитивное — если группа пакетов При использовании вместе с отрицательными спецификациями пакетов обратите внимание, что набор пакетов для каждой группы вычисляется независимо, а затем результаты объединяются. Это означает, что отрицательные спецификации в одной группе не влияют на спецификации в другой группе. |
Примеры
Следующее объявление package_group объявляет группу пакетов «тропические» которые содержат тропические фрукты.
package_group(
name = "tropical",
packages = [
"//fruits/mango",
"//fruits/orange",
"//fruits/papaya/...",
],
)
Следующие объявления описывают группы пакетов для вымышленного приложения:
package_group(
name = "fooapp",
includes = [
":controller",
":model",
":view",
],
)
package_group(
name = "model",
packages = ["//fooapp/database"],
)
package_group(
name = "view",
packages = [
"//fooapp/swingui",
"//fooapp/webui",
],
)
package_group(
name = "controller",
packages = ["//fooapp/algorithm"],
)
экспорт_файлы
exports_files([label, ...], visibility, licenses)
exports_files() определяет список файлов, принадлежащих этому пакету, которые экспортируются в другие пакеты.
Файл BUILD пакета может напрямую ссылаться только на исходные файлы, принадлежащие другому пакету, если они явно экспортированы с помощью exports_files() оператора. Подробнее о видимости файлов.
Как устаревшее поведение, файлы, упомянутые в качестве входных данных для правила, также экспортируются с использованием уровня видимости по умолчанию до тех пор, пока не включен флаг --incompatible_no_implicit_file_export. Однако на это поведение не следует полагаться, и его следует активно переходить от него.
Аргументы
Аргументом является список имён файлов в текущем пакете. Также может быть указано объявление видимости; в этом случае файлы будут видны для указанных целей. Если видимость не указана, файлы будут видны каждому пакету, даже если видимость по умолчанию пакета была указана в функции package . Также можно указать лицензии.
Пример
В следующем примере экспортируется golden.txt, текстовый файл из пакета test_data, чтобы другие пакеты могли использовать его, например, в атрибуте data тестов.
# from //test_data/BUILD exports_files(["golden.txt"])
glob
glob(include, exclude=[], exclude_directories=1, allow_empty=True)
Glob — это вспомогательная функция, которая находит все файлы, соответствующие определённым шаблонам пути, и возвращает новый, изменяемый, отсортированный список их путей. Glob ищет только файлы в собственном пакете, и ищет только исходные файлы (не сгенерированные файлы и другие цели).
Метка исходного файла включается в результат, если относительный путь файла к пакету соответствует любому из include шаблонов и ни одному из exclude шаблонов.
Списки include и exclude содержат шаблоны путей, которые относительны к текущему пакету. Каждый шаблон может состоять из одного или более сегментов пути. Как обычно в путях Unix, эти сегменты разделены /. Сегменты могут содержать символ * подстановочного знака: он соответствует любому подстроке в сегменте пути (даже пустой подстроке), за исключением разделителя каталогов /. Этот символ подстановочного знака может использоваться несколько раз в одном сегменте пути. Кроме того, символ ** подстановочного знака может соответствовать нулю или более полным сегментам пути, но он должен быть объявлен как отдельный сегмент пути.