共用變數

回報問題 查看原始碼 Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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