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