Содержание
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 объявление определяет группу пакетов под названием "tropical", содержащую тропические фрукты.
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. Также можно указать licenses.
Пример
Следующий пример экспортирует 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-путях, эти сегменты разделены /. Сегменты могут содержать символ подстановки *: это соответствует любой подстроке в сегменте пути (даже пустой подстроке), за исключением разделителя каталогов /. Этот символ подстановки может использоваться несколько раз в одном сегменте пути. Кроме того, символ подстановки ** может соответствовать нулю или более полным сегментам пути, но он должен быть объявлен как отдельный сегмент пути.