ส่วนนี้จะระบุคำศัพท์และแนวคิดต่างๆ ที่พบบ่อยสำหรับฟังก์ชันหรือกฎต่างๆ
เนื้อหา
- การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell
- การขยายป้ายกำกับ
- แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่
- แอตทริบิวต์ที่ใช้กับกฎบิลด์ทั้งหมด
- แอตทริบิวต์ที่ใช้ได้กับกฎการทดสอบทั้งหมด (*_test)
- แอตทริบิวต์ทั่วไปในกฎไบนารีทั้งหมด (*_ไบนารี)
- แอตทริบิวต์ที่กำหนดค่าได้
- เป้าหมายเอาต์พุตโดยนัย
การแปลงข้อมูล Bourne Shell
แอตทริบิวต์ของสตริงบางรายการของกฎบางข้อจะแยกเป็นคำหลายคำตามกฎการแปลงข้อมูลเป็นโทเค็นของเชลล์ Bourne กล่าวคือ การเว้นวรรคที่ไม่ได้ใส่เครื่องหมายคำพูดแยกคำแยกจากกัน และมีการใช้อักขระอัญประกาศเดี่ยวและเครื่องหมายแบ็กสแลชเพื่อป้องกันการแปลงข้อมูลเป็นโทเค็น
แอตทริบิวต์ที่อยู่ภายใต้การแปลงเป็นโทเค็นนี้มีการระบุไว้อย่างชัดแจ้งในคำจำกัดความของเอกสารนี้
โดยทั่วไปแล้ว แอตทริบิวต์ที่อยู่ภายใต้การขยายตัวแปร "สร้าง" และการแปลงข้อมูลเป็นโทเค็นของ Bourne Shell จะใช้สำหรับการส่งตัวเลือกที่กำหนดเองไปยังคอมไพเลอร์และเครื่องมืออื่นๆ ตัวอย่างของแอตทริบิวต์ดังกล่าว ได้แก่ cc_library.copts
และ java_library.javacopts
การใช้การแทนที่เหล่านี้ร่วมกันจะช่วยให้ตัวแปรสตริงเดียวขยายเป็นรายการคำตัวเลือกที่เจาะจงการกำหนดค่าได้
การขยายป้ายกำกับ
แอตทริบิวต์ของสตริงบางรายการของกฎไม่กี่ข้อที่จะอยู่ภายใต้การขยายป้ายกำกับ หากสตริงเหล่านั้นมีป้ายกำกับที่ถูกต้องเป็นสตริงย่อย เช่น //mypkg:target
และป้ายกำกับนั้นเป็นข้อกำหนดเบื้องต้นที่ประกาศแล้วของกฎปัจจุบัน ป้ายกำกับดังกล่าวจะขยายเข้าไปในชื่อพาธของไฟล์ที่ระบุโดยเป้าหมาย
//mypkg:target
แอตทริบิวต์ตัวอย่าง ได้แก่ genrule.cmd
และ cc_binary.linkopts
รายละเอียดอาจแตกต่างกันไปในแต่ละกรณี เช่น ปัญหาต่างๆ เช่น การขยายป้ายกำกับแบบสัมพัทธ์ วิธีจัดการป้ายกำกับที่ขยายไปยังไฟล์หลายไฟล์ ฯลฯ โปรดดูรายละเอียดเพิ่มเติมในเอกสารประกอบของแอตทริบิวต์กฎ
แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่
ส่วนนี้อธิบายแอตทริบิวต์ที่กำหนดโดยกฎการสร้างหลายข้อ แต่ไม่ใช่ทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
data |
ไฟล์ที่กฎนี้ต้องใช้ขณะรันไทม์ อาจแสดงไฟล์หรือเป้าหมายกฎ โดยทั่วไปจะอนุญาตให้ทำได้ทุกเป้าหมาย
เอาต์พุตเริ่มต้นและไฟล์รันไทม์ของเป้าหมายในแอตทริบิวต์
กฎใหม่ควรกำหนดแอตทริบิวต์ |
deps |
ทรัพยากร Dependency ของเป้าหมายนี้ โดยทั่วไป ควรแสดงเฉพาะเป้าหมายของกฎเท่านั้น (แม้ว่าบางกฎจะอนุญาตให้ไฟล์แสดงใน โดยทั่วไปกฎเฉพาะภาษาจะจำกัดเป้าหมายที่แสดงในรายการไว้เฉพาะสำหรับผู้ให้บริการที่มี provider ที่เจาะจง
อรรถศาสตร์ที่แม่นยำของความหมายของการที่เป้าหมายขึ้นอยู่กับกฎอื่นที่ใช้
โดยส่วนใหญ่มีการใช้ทรัพยากร 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 (เช่น การทดสอบ) เท่านั้นที่ขึ้นอยู่กับเป้าหมายนี้
ในทำนองเดียวกัน กฎที่ไม่ใช่
การทดสอบ (กฎ แอตทริบิวต์นี้มีไว้เพื่อระบุว่าเป้าหมายไม่ควรอยู่ในไบนารีที่เผยแพร่ไปยังเวอร์ชันที่ใช้งานจริง เนื่องจากจะมีการบังคับใช้ testonly ณ เวลาที่สร้าง ไม่ใช่เวลาที่เรียกใช้ และเผยแพร่แบบเสมือนจริงผ่านแผนผังทรัพยากร Dependency จึงควรพิจารณาอย่างรอบคอบ ตัวอย่างเช่น สตับและแท็กปลอมที่เป็นประโยชน์สำหรับการทดสอบ 1 หน่วยอาจมีประโยชน์สำหรับการทดสอบการผสานรวมที่เกี่ยวข้องกับไบนารีเดียวกับที่จะเผยแพร่เป็นเวอร์ชันที่ใช้งานจริงด้วย และดังนั้นจึงไม่ควรทำเครื่องหมายเป็น "ทดสอบเท่านั้น" ในทางกลับกัน กฎที่อันตรายต่อการเชื่อมโยงเข้าไม่ถึง อาจเพราะเป็นกฎเกณฑ์ลบล้างการทำงานปกติโดยไม่มีเงื่อนไข ควรทำเครื่องหมายเป็น "ทดสอบเท่านั้น" |
toolchains |
ชุดของเป้าหมายที่สร้างตัวแปรซึ่งเป้าหมายนี้ได้รับอนุญาตให้เข้าถึง เป้าหมายเหล่านี้เป็นอินสแตนซ์ของกฎที่ระบุ
โปรดทราบว่าสิ่งนี้แตกต่างจากแนวคิดของการแก้ปัญหา Toolchain ที่ใช้โดยการติดตั้งใช้งานกฎสำหรับการกำหนดค่าที่ขึ้นอยู่กับแพลตฟอร์ม คุณจะใช้แอตทริบิวต์นี้เพื่อระบุ |
visibility |
แอตทริบิวต์ |
แอตทริบิวต์ที่ใช้ได้กับกฎการทดสอบทั้งหมด (*_test)
ส่วนนี้จะอธิบายถึงแอตทริบิวต์ทั่วไปในกฎการทดสอบทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel ส่งไปยังเป้าหมายเมื่อเรียกใช้ด้วย
ระบบจะส่งอาร์กิวเมนต์เหล่านี้ก่อนค่า |
||||||||||||||||||||
env |
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อ
แอตทริบิวต์นี้ใช้ได้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
env_inherit |
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะรับค่าจากสภาพแวดล้อมภายนอกเมื่อ
แอตทริบิวต์นี้ใช้ได้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
size |
ระบุ "ความหนัก" ของเป้าหมายทดสอบ: ระยะเวลา/ทรัพยากรที่ต้องใช้ในการทำงาน การทดสอบ 1 หน่วยถือว่าเป็นการทดสอบ "เล็ก" การทดสอบการผสานรวม "ปานกลาง" และการทดสอบแบบ end-to-end "ใหญ่" หรือ "ขนาดใหญ่" Bazel ใช้ขนาดดังกล่าวเพื่อกำหนดระยะหมดเวลาเริ่มต้น ซึ่งลบล้างได้โดยใช้แอตทริบิวต์ ขนาดการทดสอบสอดคล้องกับระยะหมดเวลาเริ่มต้นต่อไปนี้และจะถือว่ามีการใช้ทรัพยากรภายในสูงสุด
ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
timeout |
ระยะเวลาที่คาดว่าจะทำการทดสอบก่อนแสดงผล
แม้ว่าแอตทริบิวต์ขนาดของการทดสอบจะควบคุมการประเมินทรัพยากร แต่อาจตั้งค่าระยะหมดเวลาของการทดสอบแยกต่างหากได้ หากไม่ได้ระบุไว้อย่างชัดเจน ระยะหมดเวลาจะอิงตามขนาดของการทดสอบ คุณลบล้างระยะหมดเวลาทดสอบได้ด้วยแฟล็ก
สำหรับครั้งอื่นนอกเหนือจากข้างต้น คุณอาจลบล้างระยะหมดเวลาทดสอบด้วยแฟล็กเบเซล ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
flaky |
ทำเครื่องหมายว่าการทดสอบไม่น่าเชื่อถือ หากตั้งค่าไว้ จะดำเนินการทดสอบสูงสุด 3 ครั้ง โดยทำเครื่องหมายว่าล้มเหลวเมื่อล้มเหลวในแต่ละครั้ง โดยค่าเริ่มต้น แอตทริบิวต์นี้จะเป็น "เท็จ" และระบบจะทำการทดสอบเพียงครั้งเดียว โปรดทราบว่าเราไม่แนะนำให้ใช้แอตทริบิวต์นี้โดยทั่วไป การทดสอบควรผ่านได้อย่างน่าเชื่อถือเมื่อมีการยืนยัน |
||||||||||||||||||||
shard_count |
ระบุจำนวนชาร์ดคู่ขนานที่จะใช้ในการทดสอบ ค่านี้จะลบล้างฮิวริสติกที่ใช้ในการกำหนดจำนวนชาร์ดคู่ขนานที่จะใช้ทดสอบ โปรดทราบว่าสำหรับกฎทดสอบบางกฎ อาจต้องใช้พารามิเตอร์นี้เพื่อเปิดใช้ชาร์ดดิ้งตั้งแต่แรก ดู หากเปิดใช้ชาร์ดดิ้งทดสอบ ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม ชาร์ดดิ้งกำหนดให้ตัวดำเนินการทดสอบสนับสนุนโปรโตคอลชาร์ดดิ้งทดสอบ หากไม่ มีความเป็นไปได้สูงว่าจะทำการทดสอบทุกๆ อย่างในทุกชาร์ด ซึ่งไม่ใช่สิ่งที่คุณต้องการ ดูรายละเอียดเกี่ยวกับชาร์ดดิ้งได้ที่ทดสอบการชาร์ด ในสารานุกรมการทดสอบ |
||||||||||||||||||||
local |
บังคับให้การทดสอบทำงานในเครื่องโดยไม่ต้องใช้แซนด์บ็อกซ์ การตั้งค่านี้เป็น "จริง" เทียบเท่ากับการระบุ "ท้องถิ่น" เป็นแท็ก
( |
แอตทริบิวต์ทั่วไปในกฎไบนารีทั้งหมด (*_ไบนารี)
ส่วนนี้จะอธิบายถึงแอตทริบิวต์ที่ใช้กับกฎไบนารีทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
args |
อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel จะส่งผ่านไปยังเป้าหมายเมื่อมีการเรียกใช้โดยคำสั่ง
หมายเหตุ: ระบบจะไม่ส่งอาร์กิวเมนต์เมื่อเรียกใช้เป้าหมายนอก Bazel (เช่น เรียกใช้ไบนารีใน |
env |
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อ
แอตทริบิวต์นี้ใช้ได้กับกฎเนทีฟเท่านั้น เช่น
หมายเหตุ: ไม่มีการตั้งค่าตัวแปรสภาพแวดล้อมเมื่อคุณเรียกใช้เป้าหมายนอก Bazel (เช่น การเรียกใช้ไบนารีใน |
output_licenses |
ใบอนุญาตของไฟล์เอาต์พุตที่ไบนารีนี้สร้างขึ้น ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้อีกต่อไป อย่าใช้สิ่งนี้ |
แอตทริบิวต์ที่กำหนดค่าได้
แอตทริบิวต์ส่วนใหญ่เป็นแบบ "กำหนดค่าได้" ซึ่งหมายความว่าค่าของแอตทริบิวต์อาจเปลี่ยนแปลงเมื่อมีการสร้างเป้าหมายในลักษณะที่แตกต่างกัน กล่าวอย่างเจาะจงคือ แอตทริบิวต์ที่กำหนดค่าได้อาจแตกต่างกันไปตามแฟล็กที่ส่งไปยังบรรทัดคำสั่ง 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
ได้ นี่คือเนมสเปซเป้าหมาย เป้าหมายของแต่ละไฟล์จะสอดคล้องกับไฟล์จริง 1 ไฟล์ในดิสก์ ("เนมสเปซของระบบไฟล์") เป้าหมายกฎแต่ละข้ออาจสอดคล้องกับไฟล์จริง 0 ไฟล์ขึ้นไปในดิสก์
อาจมีไฟล์ในดิสก์ที่ไม่มีเป้าหมายที่ตรงกัน เช่น ไฟล์ออบเจ็กต์ .o
ที่สร้างขึ้นระหว่างการคอมไพล์ C++ จะอ้างอิงจากภายในไฟล์ BUILD หรือจากบรรทัดคำสั่งไม่ได้
ด้วยวิธีนี้ เครื่องมือสร้างอาจซ่อนรายละเอียดการใช้งานบางอย่างเกี่ยวกับวิธีการทำงานของเครื่องมือ ซึ่งเราได้อธิบายไว้อย่างละเอียดในการอ้างอิงแนวคิดของ BUILD