.bzl 文件

概览

Fuchsia 项目遵循官方 Bazel .bzl 样式指南,但有一些例外情况。本页面上的指南是对常见 Bazel 样式指南和最佳实践的补充。

.bzl 文件最常用于定义规则、宏和函数,对此有额外的指导。

本页面是 Bazel 样式指南和最佳实践的一部分。

公开范围

加载可见性

与 .gni 文件不同,.bzl 文件支持加载可见性,以限制可从中加载这些文件的位置。默认情况下,没有任何限制。

始终在 .bzl 文件中指定 visibility:

  • 对于并非专门用于软件包外部的任何 .bzl 文件,请使用 visibility("private")。

    • 尤其是当软件包包含公共和私有 .bzl 文件的混合时,将后者放在 private/ 目录中可能很有意义。Bazel 具有限制在此类目录中加载文件的机制。
  • 否则,请使用 visibility([...]) 指定可以使用它的软件包(目录)。

加载 visibility 使用的语法与目标 visibility 不同:

  • 仅路径等同于 :__pkg__。

  • /... 后面的路径等同于 :__subpackages__。

对于真正要在整个代码库中使用的非常常见的目标,可以使用 "//..."。请勿使用公开可见性 (visibility("public")) [SHAC 错误]。不过,在大多数情况下,一组顶级和/或二级目录(例如 "//src/..." 和 "//sdk/lib/...")就足够了。

符号可见性

在 .bzl 文件中,为符号名称添加下划线前缀,以限制对 .bzl 文件内的访问,从而防止其他文件(即使在同一软件包 [目录] 中)使用。

请勿创建 defs.bzl 文件

虽然您可能会看到它们(尤其是在第三方代码库中),但定义或导出不确定是否会一起使用的多个符号(通常在 defs.bzl 文件中)是一种反模式。请参阅限制每个 .bzl 文件导出的符号。在所有情况下,请选择更具描述性的文件名。