Содержание
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
Группы пакетов в основном используются для управления видимостью. Общедоступная цель может быть использована в каждом пакете в дереве исходного кода. Закрытая цель может быть использована только в собственном пакете (не в подпакетах). Между этими крайностями цель может позволять доступ к собственному пакету и любым пакетам, описанным одним или несколькими группами пакетов. Более подробное объяснение системы видимости см. в атрибуте видимости.
Конкретный пакет считается частью группы, если он соответствует атрибуту 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, эти сегменты разделены /. Сегменты могут содержать символ подстановки *: он соответствует любой подстроке в сегменте пути (даже пустой подстроке), за исключением разделителя каталогов /. Этот символ подстановки может использоваться несколько раз в одном сегменте пути. Кроме того, символ подстановки ** может соответствовать нулю или более полным сегментам пути, но он должен быть объявлен как отдельный сегмент пути.