ส่วนนี้จะอธิบายคำศัพท์และแนวคิดต่างๆ ที่เหมือนกับ หลายฟังก์ชันหรือสร้างกฎได้
เนื้อหา
- การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell
- การขยายป้ายกำกับ
- แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่
- แอตทริบิวต์ที่พบบ่อยในกฎบิลด์ทั้งหมด
- แอตทริบิวต์ทั่วไปสำหรับกฎการทดสอบทั้งหมด (*_test)
- แอตทริบิวต์ทั่วไปสำหรับกฎไบนารีทั้งหมด (*_binary)
- แอตทริบิวต์ที่กำหนดค่าได้
- เป้าหมายเอาต์พุตโดยนัย
การแปลงข้อมูลเป็นโทเค็น Bourne Shell
แอตทริบิวต์สตริงของบางกฎจะแบ่งออกเป็นหลายแอตทริบิวต์ ตามกฎการแปลงข้อมูลเป็นโทเค็นของ Bourne Shell: ช่องว่างที่ไม่ใส่เครื่องหมายคำพูดคั่นระหว่างคำที่แยกไว้ แต่ละรายการ และ มีการใช้อักขระเครื่องหมายคำพูดคู่และเครื่องหมายแบ็กสแลชเพื่อป้องกัน การแปลงข้อมูลเป็นโทเค็น
แอตทริบิวต์ที่อยู่ภายใต้การแปลงข้อมูลเป็นโทเค็นนี้ ได้ระบุไว้อย่างชัดเจนในคำจำกัดความในเอกสารนี้
แอตทริบิวต์ที่อยู่ภายใต้ "ผู้ผลิต" การขยายตัวแปรและเชลล์บอร์น
โดยทั่วไปการแปลงข้อมูลเป็นโทเค็นจะใช้เพื่อส่งตัวเลือกที่กำหนดเองไปยัง
คอมไพเลอร์และเครื่องมืออื่นๆ ตัวอย่างของแอตทริบิวต์ดังกล่าว ได้แก่
cc_library.copts
และ java_library.javacopts
การใช้การแทนที่เหล่านี้ร่วมกันจะช่วยให้
ตัวแปรสตริงเดียวที่จะขยายเป็นรายการเฉพาะการกำหนดค่า
ที่เป็นตัวเลือก
การขยายป้ายกำกับ
แอตทริบิวต์สตริงบางรายการของกฎเพียงไม่กี่ข้ออยู่ภายใต้ป้ายกำกับ
การขยาย: หากสตริงเหล่านั้นมีป้ายกำกับที่ถูกต้อง
สตริงย่อย เช่น //mypkg:target
และป้ายกำกับนั้นเป็น
เป็นข้อกำหนดเบื้องต้นของกฎปัจจุบัน จะขยายเข้าไปใน
ชื่อพาธของไฟล์ที่แสดงโดย
เป้าหมาย
//mypkg:target
แอตทริบิวต์ตัวอย่าง ได้แก่ genrule.cmd
และ
cc_binary.linkopts
รายละเอียดอาจแตกต่างกันอย่างมากใน
แต่ละกรณี เกี่ยวกับประเด็นต่างๆ เช่น ป้ายกำกับที่เกี่ยวข้องหรือไม่
ขยายแล้ว ป้ายกำกับที่ขยายเป็นหลายไฟล์
ปฏิบัติ ฯลฯ ดูเอกสารแอตทริบิวต์ของกฎสำหรับ
แบบเจาะจง
แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่
ส่วนนี้จะอธิบายแอตทริบิวต์ที่กำหนดโดยกฎบิลด์หลายรายการ แต่ไม่ทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
data |
ไฟล์ที่กฎนี้ต้องใช้ในระหว่างรันไทม์ อาจแสดงไฟล์หรือเป้าหมายกฎ โดยทั่วไปแล้ว อนุญาตทุกเป้าหมาย
เอาต์พุตเริ่มต้นและไฟล์การเรียกใช้ของเป้าหมายในแอตทริบิวต์
กฎใหม่ควรกำหนดแอตทริบิวต์ |
deps |
ทรัพยากร Dependency สำหรับเป้าหมายนี้ โดยทั่วไปควรแสดงเฉพาะเป้าหมายของกฎเท่านั้น (ส่วน
กฎบางข้ออนุญาตให้แสดงไฟล์ใน โดยทั่วไปแล้ว กฎเฉพาะภาษาจะจำกัดเป้าหมายที่แสดงอยู่คือรายการที่มี providers แก่ Google
ความหมายที่ชัดเจนของความหมายสำหรับเป้าหมายที่จะขึ้นอยู่กับการใช้รายการอื่น
โดยส่วนใหญ่ ระบบมักจะใช้ทรัพยากร Dependency |
licenses |
รายการสตริงประเภทใบอนุญาตที่จะใช้สำหรับเป้าหมายนี้ ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้งานแล้ว สิ่งที่ไม่ควรทำ ให้ใช้สิ่งนี้ |
srcs |
ไฟล์ที่ประมวลผลหรือรวมไว้โดยกฎนี้ โดยทั่วไปจะแสดงไฟล์โดยตรง แต่
อาจแสดงรายการเป้าหมายกฎ (เช่น กฎเฉพาะภาษามักจะกำหนดให้ไฟล์ที่แสดง นามสกุลไฟล์ |
แอตทริบิวต์ทั่วไปสำหรับกฎบิลด์ทั้งหมด
ส่วนนี้อธิบายแอตทริบิวต์ที่เพิ่มลงในบิลด์ทั้งหมดโดยปริยาย กฎ
แอตทริบิวต์ | คำอธิบาย |
---|---|
compatible_with |
รายการสภาพแวดล้อมที่เป้าหมายนี้สร้างขึ้นได้นอกเหนือจาก สภาพแวดล้อมที่สนับสนุนตามค่าเริ่มต้น ซึ่งเป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel ที่ให้ผู้ใช้ประกาศว่า เป้าหมายสามารถพึ่งพากันได้ เช่น ใช้งานได้ภายนอก ไบนารีไม่ควรขึ้นอยู่กับไลบรารีที่มีรหัสลับของบริษัท โปรดดู ConstraintSemantics สำหรับรายละเอียด |
deprecation |
ข้อความเตือนอธิบายที่เชื่อมโยงกับเป้าหมายนี้ ซึ่งโดยทั่วไปจะใช้เพื่อแจ้งให้ผู้ใช้ทราบว่าเป้าหมายล้าสมัยแล้ว หรือถูกแทนที่โดยกฎอื่น เป็นส่วนตัวสำหรับแพ็กเกจ หรือ ซึ่งอาจถือว่าเป็นอันตรายด้วยเหตุผลบางอย่าง เราขอแนะนำให้คุณใส่ ข้อมูลอ้างอิง (เช่น หน้าเว็บ หมายเลขข้อบกพร่อง หรือตัวอย่าง CL การย้ายข้อมูล) เพื่อให้รับทราบได้อย่างง่ายดายว่าต้องทำการเปลี่ยนแปลงใดเพื่อหลีกเลี่ยงข้อความดังกล่าว หากมีเป้าหมายใหม่ ที่สามารถใช้เป็นการแทนที่แบบลดลง ขอแนะนำให้ย้ายผู้ใช้ทั้งหมดของเป้าหมายเดิม
แอตทริบิวต์นี้ไม่ส่งผลใดๆ ต่อการสร้างสิ่งต่างๆ แต่
อาจส่งผลต่อเอาต์พุตการวินิจฉัยของเครื่องมือสร้าง เครื่องมือสร้างเริ่มต้น
คำเตือนเมื่อกฎที่มีแอตทริบิวต์ ทรัพยากร Dependency ภายในแพ็กเกจจะได้รับการยกเว้นจากคําเตือนนี้ ดังนั้น ตัวอย่างเช่น การสร้างการทดสอบของกฎที่เลิกใช้จะไม่ พบคำเตือน หากเป้าหมายที่เลิกใช้งานแล้วขึ้นอยู่กับเป้าหมายอื่นที่เลิกใช้งานแล้ว จะไม่มีคำเตือน มีการเผยแพร่ ข้อความ เมื่อผู้คนหยุดใช้เป้าหมายแล้ว คุณสามารถนำเป้าหมายออกได้ |
distribs |
รายการสตริงวิธีการกระจายที่จะใช้สำหรับเป้าหมายนี้ ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้งานแล้ว สิ่งที่ไม่ควรทำ ให้ใช้สิ่งนี้ |
exec_compatible_with |
รายการ
|
exec_properties |
พจนานุกรมของสตริงที่จะเพิ่มลงใน หากมีคีย์ทั้งในพร็อพเพอร์ตี้แพลตฟอร์มและระดับเป้าหมาย ระบบจะนำค่านี้มาจากเป้าหมาย |
features |
ฟีเจอร์คือแท็กสตริงที่เปิดหรือปิดใช้ในเป้าหมายได้ ความหมายของคุณลักษณะขึ้นอยู่กับตัวกฎเอง แอตทริบิวต์ |
restricted_to |
รายการสภาพแวดล้อมที่เป้าหมายนี้สร้างได้ แทน สภาพแวดล้อมที่สนับสนุนตามค่าเริ่มต้น
ข้อมูลนี้เป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel โปรดดู
|
tags |
แท็กสามารถใช้กับกฎใดก็ได้ แท็กในการทดสอบและ
กฎ
Bazel แก้ไขลักษณะการทำงานของโค้ดแซนด์บ็อกซ์หากพบสิ่งต่อไปนี้
คีย์เวิร์ดในแอตทริบิวต์
แท็กในการทดสอบมักจะใช้เพื่ออธิบายบทบาทของการทดสอบใน เพื่อแก้ไขข้อบกพร่อง และขั้นตอนการเผยแพร่ โดยปกติแล้ว แท็กจะมีประโยชน์มากที่สุดสำหรับ C++ และ Python ซึ่งไม่มีความสามารถในการคำอธิบายประกอบรันไทม์ การใช้แท็กและขนาด ช่วยเพิ่มความยืดหยุ่นในการประกอบชุดการทดสอบที่อิงตามฐานของโค้ด นโยบายการเช็คอิน
Bazel แก้ไขลักษณะการทำงานทดสอบหากพบคีย์เวิร์ดต่อไปนี้ใน
แอตทริบิวต์
|
target_compatible_with |
รายการ
เป้าหมายที่ขึ้นอยู่กับเป้าหมายที่ใช้ร่วมกันไม่ได้คือตัวเป้าหมายเอง ถือว่าใช้ร่วมกันไม่ได้ นอกจากนี้ยังข้ามขั้นตอนดังกล่าวสําหรับการสร้างและการทดสอบด้วย รายการที่ว่างเปล่า (ซึ่งเป็นค่าเริ่มต้น) หมายความว่าเป้าหมายใช้งานร่วมกันได้ กับทุกแพลตฟอร์ม
กฎทั้งหมดที่ไม่ใช่กฎ Workspace รองรับการตั้งค่านี้
แอตทริบิวต์นี้จะไม่มีผลในบางกฎ ตัวอย่างเช่น การระบุ
โปรดดู แพลตฟอร์ม เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการข้ามเป้าหมายที่ใช้ร่วมกันไม่ได้ |
testonly |
หากจริง เฉพาะเป้าหมายทดสอบเท่านั้น (เช่น การทดสอบ) ที่ใช้เป้าหมายนี้ได้
เช่นเดียวกับกฎที่ไม่ใช่
การทดสอบ (กฎ แอตทริบิวต์นี้มีวัตถุประสงค์เพื่อหมายความว่าเป้าหมายไม่ควร ที่มีอยู่ในไบนารีที่เผยแพร่ไปยังเวอร์ชันที่ใช้งานจริง เนื่องจากมีการบังคับใช้ Testonly ในเวลาบิลด์ ไม่ใช่เวลาทำงาน และเผยแพร่ ผ่านทางแผนผัง Dependency โดยตรง ควรใช้อย่างรอบคอบ สำหรับ เช่น ต้นขั้วและของปลอมที่ มีประโยชน์สำหรับการทดสอบ 1 หน่วย และอาจเป็นประโยชน์สำหรับการทดสอบการผสานรวม เกี่ยวข้องกับไบนารีเดียวกันที่จะเผยแพร่เป็นเวอร์ชันที่ใช้งานจริง และ ดังนั้น ไม่ควรกำหนดเป็นคำว่า testonly ในทางกลับกัน กฎที่ เป็นอันตรายในการลิงก์ ซึ่งอาจเป็นเพราะไม่เป็นไปตามเงื่อนไข ลบล้างการทำงานปกติ ควรทำเครื่องหมายเป็น testonly อย่างแน่นอน |
toolchains |
ชุดของเป้าหมายที่สร้างตัวแปรเป้าหมายนี้
อนุญาตให้เข้าถึง เป้าหมายเหล่านี้คือตัวอย่างกฎที่
โปรดทราบว่าสิ่งนี้แตกต่างจากแนวคิดเรื่อง
ความละเอียดของเครื่องมือโซ่
ที่ใช้โดยการติดตั้งใช้งานกฎสำหรับการกำหนดค่าตามแพลตฟอร์ม คุณไม่สามารถใช้
เพื่อระบุว่า |
visibility |
แอตทริบิวต์ |
แอตทริบิวต์ทั่วไปสำหรับกฎการทดสอบทั้งหมด (*_test)
ส่วนนี้จะอธิบายแอตทริบิวต์ทั่วไปในกฎการทดสอบทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel ส่งไปยังเป้าหมายเมื่อ
เรียกใช้ด้วย
อาร์กิวเมนต์เหล่านี้ส่งผ่านก่อนค่า |
||||||||||||||||||||
env |
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อทำการทดสอบโดย
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
env_inherit |
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะรับค่าจาก
สภาพแวดล้อมภายนอกเมื่อการทดสอบดำเนินการโดย
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
size |
ระบุ "ความหนัก" ของเป้าหมายการทดสอบ นั่นคือ เวลา/ทรัพยากรที่ต้องใช้ในการเรียกใช้ การทดสอบ 1 หน่วยถือเป็นการทดสอบ "เล็ก" การทดสอบการผสานรวม "ปานกลาง" และการทดสอบจากต้นทางถึงปลายทาง "ใหญ่" หรือ
"ขนาดใหญ่ที่สุด" Bazel ใช้ขนาดในการกำหนดระยะหมดเวลาเริ่มต้น ซึ่งสามารถลบล้างได้โดยใช้
ขนาดทดสอบสอดคล้องกับระยะหมดเวลาเริ่มต้นต่อไปนี้และถือว่าทรัพยากรในเครื่องสูงสุด การใช้งาน:
ตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
timeout |
ระยะเวลาที่คาดว่าจะเรียกใช้การทดสอบก่อนที่จะกลับ
ขณะที่แอตทริบิวต์ขนาดของการทดสอบควบคุมการประมาณทรัพยากร
คุณสามารถตั้งค่าระยะหมดเวลาแยกต่างหากได้ หากไม่ระบุไว้อย่างชัดแจ้ง
ระยะหมดเวลาจะขึ้นอยู่กับขนาดของการทดสอบ การทดสอบ
ลบล้างระยะหมดเวลาด้วยแฟล็ก
สำหรับเวลาอื่นๆ นอกเหนือจากที่กล่าวมาข้างต้น ระยะหมดเวลาของการทดสอบสามารถลบล้างได้ด้วยฟังก์ชัน
ธงบาเซล ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
flaky |
ทำเครื่องหมายการทดสอบว่าไม่น่าเชื่อถือ หากตั้งค่าไว้ จะดำเนินการทดสอบสูงสุด 3 ครั้ง โดยทำเครื่องหมายว่าล้มเหลวก็ต่อเมื่อ ไม่สำเร็จในแต่ละครั้ง โดยค่าเริ่มต้น แอตทริบิวต์นี้จะถูกตั้งค่าเป็น "เท็จ" และการทดสอบคือ ดำเนินการเพียงครั้งเดียว โปรดทราบว่าโดยทั่วไปเราไม่แนะนำให้ใช้แอตทริบิวต์นี้ ควรผ่านการทดสอบอย่างน่าเชื่อถือเมื่อมีการยืนยัน |
||||||||||||||||||||
shard_count |
ระบุจำนวนชาร์ดคู่ขนาน ที่จะใช้ทำการทดสอบ ค่านี้จะลบล้างฮิวริสติกที่ใช้ในการกำหนดจำนวนของ
ชาร์ดคู่ขนานที่จะทำการทดสอบ โปรดทราบว่าสำหรับการทดสอบบางอย่าง
อาจต้องมีพารามิเตอร์นี้เพื่อเปิดใช้ชาร์ดดิ้ง
ตั้งแต่แรก โปรดดู หากเปิดใช้ชาร์ดดิ้งทดสอบ ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม ชาร์ดดิ้งต้องใช้ตัวดำเนินการทดสอบเพื่อรองรับโปรโตคอลการชาร์ดทดสอบ หากไม่เป็นเช่นนั้น ก็มีแนวโน้มสูงที่จะทำการทดสอบทั้งหมดในทุกชาร์ด ไม่ใช่สิ่งที่คุณต้องการ โปรดดู ทดสอบชาร์ดดิ้ง ในสารานุกรมการทดสอบเพื่อดูรายละเอียดเกี่ยวกับการชาร์ดดิ้ง |
||||||||||||||||||||
local |
บังคับให้การทดสอบทำงานภายในเครื่องโดยไม่ใช้แซนด์บ็อกซ์ การตั้งค่านี้เป็น "จริง" เทียบเท่ากับการระบุ "ท้องถิ่น" ในรูปแบบแท็ก
( |
แอตทริบิวต์ทั่วไปสำหรับกฎไบนารีทั้งหมด (*_binary)
ส่วนนี้จะอธิบายแอตทริบิวต์ทั่วไปในกฎไบนารีทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
args |
อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel จะส่งไปที่เป้าหมายเมื่อดำเนินการเรียกใช้
โดยใช้คำสั่ง
หมายเหตุ: ระบบจะไม่ส่งอาร์กิวเมนต์เมื่อคุณเรียกใช้เป้าหมาย
นอก Bazel (ตัวอย่างเช่น การดำเนินการไบนารีด้วยตนเองใน
|
env |
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อเป้าหมายคือ
เรียกใช้โดย
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น
หมายเหตุ: ไม่มีการตั้งค่าตัวแปรสภาพแวดล้อมเมื่อคุณเรียกใช้เป้าหมาย
นอก Bazel (ตัวอย่างเช่น การดำเนินการไบนารีด้วยตนเองใน
|
output_licenses |
ใบอนุญาตของไฟล์เอาต์พุตที่ไบนารีนี้สร้างขึ้น ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้งานแล้ว สิ่งที่ไม่ควรทำ ให้ใช้สิ่งนี้ |
แอตทริบิวต์ที่กำหนดค่าได้
แอตทริบิวต์ส่วนใหญ่เป็นแบบ "configurable" ซึ่งหมายความว่าค่าอาจเปลี่ยนแปลงเมื่อ เป้าหมายนั้นสร้างขึ้นในแบบต่างๆ โดยเฉพาะอย่างยิ่ง แอตทริบิวต์ที่กำหนดค่าได้ อาจแตกต่างกันไปตามค่าสถานะที่ส่งผ่านไปยังบรรทัดคำสั่ง Bazel หรือ ทรัพยากร Dependency แบบดาวน์สตรีมกำลังขอเป้าหมาย ซึ่งใช้สำหรับ ตัวอย่างเช่น เพื่อปรับแต่งเป้าหมายสำหรับแพลตฟอร์มต่างๆ หรือโหมดการรวบรวม
ตัวอย่างต่อไปนี้แสดงแหล่งที่มาที่แตกต่างกันสำหรับเป้าหมายที่แตกต่างกัน
สถาปัตยกรรม กำลังเรียกใช้ bazel build :multiplatform_lib --cpu x86
จะสร้างเป้าหมายโดยใช้ x86_impl.cc
ขณะที่แทนที่
--cpu arm
จะทำให้แอปใช้ arm_impl.cc
แทน
cc_library( name = "multiplatform_lib", srcs = select({ ":x86_mode": ["x86_impl.cc"], ":arm_mode": ["arm_impl.cc"] }) ) config_setting( name = "x86_mode", values = { "cpu": "x86" } ) config_setting( name = "arm_mode", values = { "cpu": "arm" } )
ฟังก์ชัน select()
ค่าทางเลือกต่างๆ สำหรับแอตทริบิวต์ที่กำหนดค่าได้โดยอิงตาม
ในวันที่ config_setting
หรือ constraint_value
เกณฑ์การกำหนดค่าของเป้าหมาย
Bazel ประเมินแอตทริบิวต์ที่กำหนดค่าได้หลังประมวลผลมาโครและก่อน
กฎการประมวลผลข้อมูล (หรือทางเทคนิค คือระหว่าง
ของการโหลดและการวิเคราะห์)
การประมวลผลใดๆ ก่อนการประเมิน select()
ไม่ทราบว่าสิ่งใด
สาขาที่ select()
เลือก เช่น มาโครจะไม่สามารถเปลี่ยนแปลง
พฤติกรรมโดยอิงตาม Branch ที่เลือก และ bazel query
สามารถ
ทำการคาดเดาอย่างระมัดระวังเกี่ยวกับทรัพยากร Dependency ที่กำหนดค่าได้ของเป้าหมายเท่านั้น โปรดดู
คำถามที่พบบ่อยนี้
เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ select()
กับกฎและมาโคร
แอตทริบิวต์ที่ทำเครื่องหมาย nonconfigurable
ในเอกสารประกอบไม่สามารถ
ใช้ฟีเจอร์นี้ได้เลย ปกติแล้วแอตทริบิวต์หนึ่งจะกำหนดค่าไม่ได้เพราะ Bazel
บริษัทจะต้องทราบมูลค่าก่อนที่จะกำหนดวิธีแก้ไข
select()
โปรดดู แอตทริบิวต์บิลด์ที่กำหนดค่าได้เพื่อดูภาพรวมโดยละเอียด
เป้าหมายเอาต์พุตโดยนัย
เลิกใช้งานเอาต์พุตโดยนัยใน C++ แล้ว โปรดอย่าใช้ ในภาษาอื่นๆ หากเป็นไปได้ เรายังไม่มีเส้นทางการเลิกใช้งาน แต่ในที่สุดเราก็จะเลิกใช้งานด้วย
เมื่อคุณกำหนดกฎการสร้างในไฟล์ BUILD คุณจะ
ประกาศเป้าหมายกฎที่มีชื่อใหม่ในแพ็กเกจ มีกฎการสร้างหลายกฎ
ก็จะมีไฟล์เอาต์พุตอย่างน้อย 1 ไฟล์ด้วยโดยปริยาย
เป้าหมายซึ่งมีเนื้อหาและความหมายเฉพาะเจาะจงตามกฎ
เช่น เมื่อคุณประกาศอย่างชัดเจนถึง
กฎ java_binary(name='foo', ...)
ข้อ คุณยัง
การประกาศไฟล์เอาต์พุตโดยปริยาย
เป้าหมาย foo_deploy.jar
เป็นสมาชิกของแพ็กเกจเดียวกัน
(เป้าหมายเฉพาะนี้เป็น ที่เก็บถาวรของ Java ในตัวเองซึ่งเหมาะสม
สำหรับการติดตั้งใช้งาน)
เป้าหมายเอาต์พุตโดยนัยคือสมาชิกชั้นหนึ่งของโลก
กราฟเป้าหมาย แคมเปญเหล่านี้สร้างขึ้นตามความต้องการเช่นเดียวกับเป้าหมายอื่นๆ
เมื่อระบุไว้ในคำสั่งที่สร้างระดับบนสุดหรือเมื่อ
เป็นข้อกำหนดเบื้องต้นที่จำเป็นสำหรับเป้าหมายบิลด์อื่นๆ สามารถ
อ้างอิงว่าเป็นทรัพยากร Dependency ในไฟล์ BUILD และสังเกตได้ใน
เอาต์พุตของเครื่องมือวิเคราะห์ เช่น bazel query
สำหรับกฎการสร้างแต่ละประเภท เอกสารประกอบของกฎจะประกอบด้วย ส่วนพิเศษที่มีรายละเอียดชื่อและเนื้อหาในทางอ้อม เอาต์พุตที่มาจากการประกาศกฎประเภทนั้น
ความแตกต่างที่สำคัญแต่ค่อนข้างเป็นความแตกต่างระหว่าง
ระบบบิลด์ใช้เนมสเปซ 2 รายการ ได้แก่
ป้ายกำกับจะระบุเป้าหมาย
ซึ่งอาจเป็นกฎหรือไฟล์ และเป้าหมายไฟล์อาจแบ่งออกเป็น
เป้าหมายไฟล์ต้นฉบับ (หรืออินพุต) และไฟล์ที่ได้รับ (หรือเอาต์พุต) อย่างใดอย่างหนึ่ง
เป้าหมาย สิ่งที่คุณสามารถพูดถึงในไฟล์ BUILD
สร้างจากบรรทัดคำสั่ง หรือตรวจสอบโดยใช้ bazel query
นี่คือเนมสเปซเป้าหมาย เป้าหมายไฟล์แต่ละรายการจะสอดคล้องกับ
ลงในไฟล์จริงหนึ่งไฟล์บนดิสก์ ("เนมสเปซระบบไฟล์"); กฎแต่ละข้อ
เป้าหมายอาจตรงกับ 0 หรือมีไฟล์จริงอย่างน้อย 1 ไฟล์ในดิสก์
อาจมีไฟล์ในดิสก์ที่ไม่มีเป้าหมายที่เกี่ยวข้อง สำหรับ
ตัวอย่างเช่น ไฟล์ออบเจ็กต์ .o
ไฟล์ที่สร้างขึ้นระหว่างการคอมไพล์ C++
ไม่สามารถอ้างอิงจากภายในไฟล์ BUILD หรือจากบรรทัดคำสั่ง
ด้วยวิธีนี้ เครื่องมือสร้างอาจซ่อนรายละเอียดการใช้งานบางอย่างของ
วิธีการทำงาน ซึ่งอธิบายโดยละเอียดเพิ่มเติมใน
ข้อมูลอ้างอิงเกี่ยวกับแนวคิดของ BUILD