共用變數

回報問題 查看來源 夜間 7.2 7.1 7.0 6.5 6.4

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