2022 年 BazelCon 将于 11 月 16 日至 17 日在纽约和线上举办。
立即报名!

共享变量

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

BUILD 文件应简单明了。它们通常由一系列目标声明组成。随着代码库和 BUILD 文件越大,您可能会注意到一些重复项,例如:

cc_library(
  name = "foo",
  copts = ["-DVERSION=5"],
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = ["-DVERSION=5"],
  srcs = ["bar.cc"],
  deps = [":foo"],
)

BUILD 文件中的代码重复通常没有问题。这可以使文件更具可读性:每个声明都可在没有上下文的情况下被读取和理解。这不仅对人类很重要,而且对外部工具也很重要。例如,工具可能能够读取和更新 BUILD 文件以添加缺少的依赖项。代码重构和代码重用可能会阻止此类自动修改。

如果共享值很有用(例如,值必须保持同步),则可以引入一个变量:

COPTS = ["-DVERSION=5"]

cc_library(
  name = "foo",
  copts = COPTS,
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = COPTS,
  srcs = ["bar.cc"],
  deps = [":foo"],
)

多个声明现在使用 COPTS 值。按照惯例,您可以使用大写字母来命名全局常量。

在多个 BUILD 文件中共享变量

如果您需要在多个 BUILD 文件中共享一个值,则必须将该值放在 .bzl 文件中。.bzl 文件包含可在 BUILD 文件中使用的定义(变量和函数)。

path/to/variables.bzl 中,写入:

COPTS = ["-DVERSION=5"]

然后,您可以更新 BUILD 文件以访问变量:

load("//path/to:variables.bzl", "COPTS")

cc_library(
  name = "foo",
  copts = COPTS,
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = COPTS,
  srcs = ["bar.cc"],
  deps = [":foo"],
)