共用變數

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