Membagikan Variabel

Laporkan masalah Lihat sumber Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

BUILD file dimaksudkan agar sederhana dan deklaratif. Biasanya terdiri dari serangkaian deklarasi target. Seiring dengan bertambah besarnya codebase dan file BUILD Anda, 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 apa pun. Hal ini penting, tidak hanya bagi manusia, tetapi juga bagi alat eksternal. Misalnya, alat 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 berguna untuk membagikan 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. Menurut konvensi, gunakan huruf besar untuk menamai konstanta global.

Membagikan variabel di beberapa file BUILD

Jika Anda perlu membagikan nilai di beberapa file BUILD, Anda harus menempatkannya 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"],
)