Содержание
пакет
package(default_deprecation, default_testonly, default_visibility, features)
Эта функция объявляет метаданные, которые применяются к каждой последующей команде в пакете. Она используется не более одного раза в пакете (файл BUILD).
Функция package() должна вызываться сразу после всех инструкций load() в верхней части файла, перед любой командой.
Аргументы
| Атрибут | Описание |
|---|---|
default_visibility |
По умолчанию, видимость правил в данном пакете. Каждое правило в этом пакете имеет видимость, указанную в этом атрибуте, если не указано иное в атрибуте |
default_deprecation |
Устанавливает значение сообщения по умолчанию deprecated для всех правил в этом пакете. |
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 путях, эти сегменты разделены /. Сегменты могут содержать символ * подстановочный символ: это соответствует любой подстроке в сегменте пути (даже пустой подстроке), за исключением разделителя каталога /. Этот символ подстановки может использоваться несколько раз в одном сегменте пути. Кроме того, символ ** подстановки может соответствовать нулю или более полным сегментам пути, но он должен быть объявлен как отдельный сегмент пути.