共用變數

回報問題 查看原始碼

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