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

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4

ไฟล์ 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"],
)