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