共用變數

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