Membagikan Variabel

Laporkan masalah Lihat sumber Per Malam · 7,2 · 7,1 · 7,0 · 6,5 · 6,4

File BUILD dimaksudkan agar sederhana dan deklaratif. Mereka biasanya 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. Ini dapat membuat file lebih dapat dibaca: setiap deklarasi dapat dibaca dan dipahami tanpa konteks apa pun. Ini penting, tidak hanya untuk manusia, tetapi juga untuk alat eksternal. Sebagai contoh, alat ini mungkin dapat membaca dan memperbarui file BUILD untuk menambahkan dependensi yang hilang. Pemfaktoran ulang kode dan penggunaan ulang kode dapat mencegah proses modifikasi.

Jika berbagi nilai berguna (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.

Berbagi variabel di beberapa file BUILD

Jika perlu membagikan nilai ke 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"],
)