共享变量

报告问题 查看来源 每晚 · 7.2。 · 7.1敬上 · 7.0 · 6.5 · 6.4

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"],
)