共用變數

回報問題 查看來源

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