File BUILD
dimaksudkan untuk menjadi sederhana dan deklaratif. Biasanya,
ini akan terdiri dari serangkaian deklarasi target. Sebagai code base dan BUILD
Anda
ukuran file menjadi lebih besar, Anda mungkin akan melihat beberapa duplikasi, seperti:
cc_library(
name = "foo",
copts = ["-DVERSION=5"],
srcs = ["foo.cc"],
)
cc_library(
name = "bar",
copts = ["-DVERSION=5"],
srcs = ["bar.cc"],
deps = [":foo"],
)
Duplikasi kode dalam file BUILD
biasanya tidak masalah. Hal ini dapat membuat file lebih
mudah dibaca: setiap deklarasi dapat dibaca dan dipahami tanpa konteks apa pun. Ini
penting, tidak hanya untuk manusia, tetapi juga untuk alat eksternal. Misalnya,
alat mungkin dapat membaca dan mengupdate file BUILD
untuk menambahkan dependensi yang tidak ada.
Pemfaktoran ulang kode dan penggunaan ulang kode dapat mencegah proses
modifikasi.
Jika berguna untuk membagikan nilai (misalnya, jika nilai harus tetap sinkron), Anda dapat memperkenalkan variabel:
COPTS = ["-DVERSION=5"]
cc_library(
name = "foo",
copts = COPTS,
srcs = ["foo.cc"],
)
cc_library(
name = "bar",
copts = COPTS,
srcs = ["bar.cc"],
deps = [":foo"],
)
Beberapa deklarasi kini menggunakan nilai COPTS
. Sesuai konvensi, gunakan huruf besar
huruf untuk menamai konstanta global.
Membagikan variabel di beberapa file BUILD
Jika perlu membagikan nilai di beberapa file BUILD
, Anda harus memasukkannya
dalam file .bzl
. File .bzl
berisi definisi (variabel dan fungsi)
yang dapat digunakan dalam file BUILD
.
Di path/to/variables.bzl
, tulis:
COPTS = ["-DVERSION=5"]
Kemudian, Anda dapat memperbarui file BUILD
untuk mengakses variabel:
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"],
)