File BUILD
harus sederhana dan deklaratif. Class ini biasanya
terdiri dari serangkaian deklarasi target. Saat code base dan file BUILD
Anda semakin 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 menjadi masalah. Hal ini dapat membuat file lebih
mudah dibaca: setiap deklarasi dapat dibaca dan dipahami tanpa konteks. Hal ini
penting, tidak hanya bagi manusia, tetapi juga alat-alat eksternal. Misalnya, alat mungkin dapat membaca dan mengupdate file BUILD
untuk menambahkan dependensi yang tidak ada.
Pemfaktoran ulang kode dan penggunaan kembali kode dapat mencegah jenis modifikasi
otomatis ini.
Jika berguna untuk berbagi nilai (misalnya, jika nilai harus tetap disinkronkan), 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
. Berdasarkan konvensi, gunakan huruf besar untuk memberi nama konstanta global.
Berbagi variabel di beberapa file BUILD
Jika Anda perlu berbagi 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"]
Selanjutnya, Anda dapat memperbarui file BUILD
untuk mengakses variabel tersebut:
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"],
)