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