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