File BUILD
dimaksudkan agar sederhana dan deklaratif. Deklarasi tersebut biasanya
terdiri dari serangkaian deklarasi target. Saat code base dan file BUILD
bertambah 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. Tindakan ini dapat membuat file lebih
mudah dibaca: setiap deklarasi dapat dibaca dan dipahami tanpa konteks apa pun. Hal ini
penting, tidak hanya untuk manusia, tetapi juga untuk alat eksternal. Misalnya, alat mungkin dapat membaca dan memperbarui file BUILD
untuk menambahkan dependensi yang tidak ada.
Pemfaktoran ulang kode dan penggunaan ulang kode dapat mencegah modifikasi otomatis semacam ini.
Jika berbagi nilai berguna (misalnya, jika nilai harus tetap sinkron), Anda dapat memasukkan 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 perlu membagikan nilai ke beberapa file BUILD
, Anda harus memasukkannya ke 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"],
)