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