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

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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 เพื่อเพิ่มการอ้างอิงที่ขาดหายไปได้ การปรับโครงสร้างโค้ดและการนำโค้ดกลับมาใช้ใหม่จะช่วยป้องกันการแก้ไขอัตโนมัติประเภทนี้ได้

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

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