ตัวแปรการแชร์

BUILD ไฟล์มีวัตถุประสงค์ให้เรียบง่ายและตรงไปตรงมา ซึ่งโดยทั่วไปจะประกอบด้วยชุดการประกาศเป้าหมาย เมื่อฐานโค้ดและไฟล์ BUILD ใหญ่ขึ้น คุณจึงอาจสังเกตเห็นว่ามีโค้ดที่ซ้ำกันอยู่บ้าง เช่น

cc_library(
  name = "foo",
  copts = ["-DVERSION=5"],
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = ["-DVERSION=5"],
  srcs = ["bar.cc"],
  deps = [":foo"],
)

โดยปกติแล้วการทำซ้ำโค้ดในไฟล์ BUILD จะสามารถทำได้ วิธีนี้อาจทำให้ไฟล์อ่านง่ายขึ้น เนื่องจากระบบจะอ่านและทำความเข้าใจการประกาศแต่ละรายการได้โดยไม่ต้องมีบริบท ซึ่งไม่เพียงสำคัญสำหรับมนุษย์เท่านั้น แต่สำหรับเครื่องมือจากภายนอกด้วย เช่น เครื่องมืออาจอ่านและอัปเดตไฟล์ BUILD เพื่อเพิ่มทรัพยากร Dependency ที่ขาดหายไปได้ การเปลี่ยนโครงสร้างโค้ดและการใช้โค้ดซ้ำอาจป้องกันไม่ให้มีการแก้ไขอัตโนมัติในลักษณะนี้ได้

หากการแชร์ค่ามีประโยชน์ (เช่น ต้องซิงค์ค่าอยู่เสมอ) คุณอาจนำตัวแปรมาใช้ได้ดังนี้

COPTS = ["-DVERSION=5"]

cc_library(
  name = "foo",
  copts = COPTS,
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = COPTS,
  srcs = ["bar.cc"],
  deps = [":foo"],
)

ตอนนี้การประกาศหลายรายการใช้ค่า COPTS แล้ว ตามหลักแล้ว ให้ใช้อักษรตัวพิมพ์ใหญ่ เพื่อตั้งชื่อค่าคงที่ส่วนกลาง

การแชร์ตัวแปรในไฟล์ BUILD หลายไฟล์

หากต้องการแชร์ค่าในไฟล์ BUILD หลายไฟล์ คุณต้องใส่ค่านั้นในไฟล์ .bzl ไฟล์ .bzl มีคำจำกัดความ (ตัวแปรและฟังก์ชัน) ที่ใช้ในไฟล์ BUILD ได้

ใน path/to/variables.bzl ให้เขียนว่า

COPTS = ["-DVERSION=5"]

จากนั้นจึงอัปเดตไฟล์ BUILD เพื่อเข้าถึงตัวแปรได้โดยทำดังนี้

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"],
)