ส่วนนี้จะอธิบายคำศัพท์และแนวคิดต่างๆ ที่เหมือนกับฟังก์ชันหลายรายการหรือกฎสร้างกฎ
เนื้อหา
- การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell
- การขยายป้ายกำกับ
- แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่
- แอตทริบิวต์ที่พบบ่อยในกฎบิลด์ทั้งหมด
- แอตทริบิวต์ที่พบบ่อยสำหรับกฎการทดสอบทั้งหมด (*_test)
- แอตทริบิวต์ทั่วไปสำหรับกฎไบนารีทั้งหมด (*_binary)
- แอตทริบิวต์ที่กำหนดค่าได้
- เป้าหมายเอาต์พุตโดยนัย
การแปลงข้อมูลเป็นโทเค็น Bourne Shell
แอตทริบิวต์สตริงบางอย่างของกฎบางข้อจะแบ่งออกเป็นคำหลายคำตามกฎการแปลงข้อมูลเป็นโทเค็นของ Bourne Shell นั่นคือ การเว้นวรรคที่ไม่ได้ใส่เครื่องหมายคำพูดจะคั่นคำที่แยกไว้ ตลอดจนใช้อักขระเครื่องหมายคำพูดแบบขีดเดียวและคู่และแบ็กสแลชเพื่อป้องกันการแปลงข้อมูลเป็นโทเค็น
แอตทริบิวต์ที่ต้องอยู่ภายใต้การแปลงข้อมูลเป็นโทเค็นนี้มีการระบุไว้อย่างชัดเจนในคำจำกัดความในเอกสารนี้
แอตทริบิวต์ที่อยู่ภายใต้การขยายตัวแปร "Make" และการแปลงเป็นโทเค็นแบบ Bourne มักจะใช้เพื่อส่งตัวเลือกที่กำหนดเองไปยังคอมไพเลอร์และเครื่องมืออื่นๆ ตัวอย่างของแอตทริบิวต์ดังกล่าวคือ cc_library.copts
และ java_library.javacopts
การใช้การแทนที่เหล่านี้ร่วมกันจะช่วยให้ตัวแปรสตริงเดี่ยวขยายลงในรายการคำตัวเลือกที่เฉพาะเจาะจงสำหรับการกำหนดค่าได้
การขยายป้ายกำกับ
แอตทริบิวต์สตริงบางรายการของกฎเพียงไม่กี่ข้ออาจมีการขยายป้ายกำกับ หากสตริงเหล่านั้นมีป้ายกำกับที่ถูกต้องเป็นสตริงย่อย เช่น //mypkg:target
และป้ายกำกับนั้นเป็นข้อกำหนดเบื้องต้นที่ประกาศไว้ของกฎปัจจุบัน ป้ายกำกับนั้นจะขยายเข้าไปในชื่อเส้นทางของไฟล์ที่แสดงโดย target
//mypkg:target
แอตทริบิวต์ตัวอย่าง ได้แก่ genrule.cmd
และ cc_binary.linkopts
รายละเอียดอาจแตกต่างกันอย่างมากในแต่ละกรณี เช่น ปัญหาต่างๆ เช่น การขยายป้ายกำกับแบบสัมพัทธ์ วิธีจัดการป้ายกำกับที่ขยายไปยังไฟล์หลายไฟล์ เป็นต้น โปรดดูข้อมูลที่เจาะจงในเอกสารประกอบของแอตทริบิวต์กฎ
แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่
ส่วนนี้จะอธิบายแอตทริบิวต์ที่กำหนดโดยกฎบิลด์หลายรายการ แต่ไม่ใช่ทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
data |
รายการป้ายกำกับ ค่าเริ่มต้นคือ ไฟล์ที่กฎนี้ต้องใช้ในระหว่างรันไทม์ อาจแสดงไฟล์หรือเป้าหมายกฎ โดยทั่วไปแล้ว จะอนุญาตทุกเป้าหมาย
เอาต์พุตเริ่มต้นและไฟล์การเรียกใช้ของเป้าหมายในแอตทริบิวต์
กฎใหม่ควรกำหนดแอตทริบิวต์ |
deps |
รายการป้ายกำกับ ค่าเริ่มต้นคือ
ทรัพยากร Dependency สำหรับเป้าหมายนี้ โดยทั่วไปควรแสดงเฉพาะเป้าหมายของกฎเท่านั้น (แม้ว่ากฎบางข้อจะอนุญาตให้ไฟล์ปรากฏใน โดยทั่วไปแล้ว กฎเฉพาะภาษาจะจำกัดเป้าหมายที่แสดงอยู่คือเฉพาะที่มีผู้ให้บริการบางรายเท่านั้น
ความหมายที่ชัดเจนของความหมายของความหมายของเป้าหมายที่จะขึ้นอยู่กับอีกแบบหนึ่งที่ใช้
โดยส่วนใหญ่แล้ว ทรัพยากร Dependency ของ |
licenses |
รายการสตริง nonconfigurable ค่าเริ่มต้นคือ รายการสตริงประเภทใบอนุญาตที่จะใช้สำหรับเป้าหมายนี้ ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้งานแล้ว อย่าใช้งานสิ่งนี้ |
srcs |
รายการป้ายกำกับ ค่าเริ่มต้นคือ
ไฟล์ที่ประมวลผลหรือรวมไว้โดยกฎนี้ โดยทั่วไปจะแสดงไฟล์โดยตรง แต่อาจแสดงรายการเป้าหมายของกฎ (เช่น กฎเฉพาะภาษามักจะกำหนดให้ไฟล์ที่แสดงในรายการมีนามสกุลไฟล์ที่เฉพาะเจาะจง |
แอตทริบิวต์ทั่วไปสำหรับกฎบิลด์ทั้งหมด
ส่วนนี้จะอธิบายแอตทริบิวต์ที่เพิ่มในกฎบิลด์ทั้งหมดโดยปริยาย
แอตทริบิวต์ | คำอธิบาย |
---|---|
compatible_with |
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ รายการสภาพแวดล้อมที่เป้าหมายนี้สร้างได้นอกเหนือจากสภาพแวดล้อมที่รองรับเริ่มต้น วิธีนี้เป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel ที่ช่วยให้ผู้ใช้ประกาศว่าเป้าหมายใดที่ทำได้และไม่ได้ เช่น ไบนารีที่ทำให้ใช้งานได้ภายนอกไม่ควรพึ่งพาไลบรารีที่มีรหัสลับของบริษัท ดูรายละเอียดได้ที่ ConstraintSemantics |
deprecation |
สตริง nonconfigurable ค่าเริ่มต้นคือ ข้อความเตือนอธิบายที่เชื่อมโยงกับเป้าหมายนี้ ซึ่งโดยปกติแล้วจะใช้เพื่อแจ้งให้ผู้ใช้ทราบว่าเป้าหมายนั้นล้าสมัยแล้ว หรือมีการใช้กฎอื่นมาแทนที่แล้ว เป็นเรื่องส่วนตัวสำหรับแพ็กเกจ หรืออาจถือว่าเป็นอันตรายเนื่องด้วยเหตุผลบางอย่าง ควรใส่ข้อมูลอ้างอิง (เช่น หน้าเว็บ หมายเลขข้อบกพร่อง หรือตัวอย่าง CL สำหรับการย้ายข้อมูล) เพื่อให้ทราบถึงการเปลี่ยนแปลงที่จำเป็นสำหรับการหลีกเลี่ยงข้อความได้อย่างง่ายดาย หากมีเป้าหมายใหม่ที่สามารถใช้แทนแบบลดลงได้ ขอแนะนำให้ย้ายผู้ใช้ทั้งหมดของเป้าหมายเดิม
แอตทริบิวต์นี้ไม่มีผลต่อวิธีสร้างสิ่งต่างๆ แต่อาจส่งผลต่อผลลัพธ์การวินิจฉัยของเครื่องมือสร้าง เครื่องมือสร้างจะออกคำเตือนเมื่อกฎที่มีแอตทริบิวต์ ทรัพยากร Dependency ภายในแพ็กเกจจะได้รับการยกเว้นจากคําเตือนนี้ ดังนั้นการสร้างการทดสอบของกฎที่เลิกใช้งานแล้วไม่พบคําเตือน เป็นต้น หากเป้าหมายที่เลิกใช้งานแล้วขึ้นอยู่กับเป้าหมายอื่นที่เลิกใช้งานแล้ว จะไม่มีการออกข้อความเตือน เมื่อผู้คนหยุดใช้เป้าหมายแล้ว คุณสามารถนำเป้าหมายออกได้ |
distribs |
รายการสตริง nonconfigurable ค่าเริ่มต้นคือ รายการสตริงวิธีการกระจายที่จะใช้สำหรับเป้าหมายนี้ ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้งานแล้ว อย่าใช้งานสิ่งนี้ |
exec_compatible_with |
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ
รายการ |
exec_properties |
พจนานุกรมของสตริง ค่าเริ่มต้นคือ พจนานุกรมของสตริงที่จะเพิ่มลงใน หากมีคีย์ทั้งในพร็อพเพอร์ตี้แพลตฟอร์มและระดับเป้าหมาย ระบบจะนำค่านี้มาจากเป้าหมาย |
features |
รายการสตริง feature ค่าเริ่มต้นคือ ฟีเจอร์คือแท็กสตริงที่เปิดหรือปิดใช้ในเป้าหมายได้ ความหมายของฟีเจอร์ขึ้นอยู่กับตัวกฎเอง แอตทริบิวต์ |
restricted_to |
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ รายการสภาพแวดล้อมที่สร้างเป้าหมายนี้ได้แทนสภาพแวดล้อมเริ่มต้นที่รองรับ
ข้อมูลนี้เป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel ดูรายละเอียดได้ที่
|
tags |
รายการสตริง nonconfigurable ค่าเริ่มต้นคือ
แท็กสามารถใช้กับกฎใดก็ได้ แท็กในการทดสอบและกฎ
Bazel แก้ไขลักษณะการทำงานของโค้ดแซนด์บ็อกซ์หากพบคีย์เวิร์ดต่อไปนี้ในแอตทริบิวต์
โดยทั่วไปแล้ว แท็กในการทดสอบจะใช้เพื่ออธิบายบทบาทของการทดสอบในกระบวนการแก้ไขข้อบกพร่องและการเผยแพร่ โดยปกติแล้ว แท็กจะมีประโยชน์มากที่สุดสำหรับการทดสอบ C++ และ Python ซึ่งไม่มีความสามารถของคำอธิบายประกอบรันไทม์ การใช้แท็กและองค์ประกอบขนาดช่วยให้รวบรวมชุดการทดสอบได้อย่างยืดหยุ่นตามนโยบายการเช็คอินของ Codebase
Bazel แก้ไขลักษณะการทำงานทดสอบหากพบคีย์เวิร์ดต่อไปนี้ในแอตทริบิวต์
|
target_compatible_with |
รายการป้ายกำกับ ค่าเริ่มต้นคือ
รายการ ส่วนเป้าหมายที่ขึ้นอยู่กับเป้าหมายที่ใช้ร่วมกันไม่ได้จะถือว่าเข้ากันไม่ได้ นอกจากนี้ยังข้ามขั้นตอนดังกล่าวสําหรับการสร้างและการทดสอบด้วย รายการที่ว่างเปล่า (ซึ่งเป็นค่าเริ่มต้น) หมายถึงเป้าหมายที่เข้ากันได้กับทุกแพลตฟอร์ม
กฎทั้งหมดที่ไม่ใช่กฎ Workspace จะรองรับแอตทริบิวต์นี้
แอตทริบิวต์นี้จะไม่มีผลในบางกฎ ตัวอย่างเช่น การระบุ
ดูหน้าแพลตฟอร์มเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการข้ามเป้าหมายที่ใช้ร่วมกันไม่ได้ |
testonly |
บูลีน nonconfigurable ค่าเริ่มต้นคือ
หากเป็น
ในทำนองเดียวกัน กฎที่ไม่ใช่
การทดสอบ (กฎ แอตทริบิวต์นี้มีจุดประสงค์เพื่อหมายความว่าเป้าหมายไม่ควรอยู่ในไบนารีที่เผยแพร่ไปยังเวอร์ชันที่ใช้งานจริง เนื่องจากมีการบังคับใช้ Testonly ในเวลาบิลด์ ไม่ใช่ขณะทำงาน และแพร่กระจายผ่านแผนผัง Dependency ได้แบบเสมือนจริง คุณจึงควรใช้วิธีนี้อย่างรอบคอบ ตัวอย่างเช่น สตับและปลอมที่เป็นประโยชน์สำหรับการทดสอบหน่วยอาจมีประโยชน์สำหรับการทดสอบการผสานรวมที่เกี่ยวข้องกับไบนารีเดียวกันที่จะเปิดตัวเวอร์ชันที่ใช้งานจริง ดังนั้นจึงไม่ควรทำเครื่องหมายเป็น testonly ด้วย ในทางกลับกัน กฎที่เป็นอันตรายเมื่อเชื่อมโยงกัน อาจเป็นเพราะกฎเหล่านั้นลบล้างลักษณะการทำงานปกติอย่างไม่มีเงื่อนไข ควรทำเครื่องหมายเป็น "ทดสอบเท่านั้น" |
toolchains |
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ
ชุดของเป้าหมายที่สร้างตัวแปรเป้าหมายนี้
สามารถเข้าถึงได้ เป้าหมายเหล่านี้เป็นอินสแตนซ์ของกฎที่ระบุ
โปรดทราบว่าค่านี้แตกต่างจากแนวคิดความละเอียดของ Toolchain ที่ใช้โดยการใช้กฎสำหรับการกำหนดค่าตามแพลตฟอร์ม คุณใช้แอตทริบิวต์นี้เพื่อระบุ |
visibility |
รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ
แอตทริบิวต์ |
แอตทริบิวต์ทั่วไปสำหรับกฎการทดสอบทั้งหมด (*_test)
ส่วนนี้จะอธิบายแอตทริบิวต์ทั่วไปในกฎการทดสอบทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
รายการสตริง ขึ้นอยู่กับการแทนที่ $(location) และ "Makeตัวแปร" และการแปลงข้อมูลเป็นโทเค็น Bourne Shell ค่าเริ่มต้นคือ อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel ส่งไปยังเป้าหมายเมื่อเรียกใช้ด้วย
ระบบจะส่งอาร์กิวเมนต์เหล่านี้ก่อนค่า |
||||||||||||||||||||
env |
พจนานุกรมของสตริง ค่าจะขึ้นอยู่กับการแทนที่ $(location) และ "Makeตัวแปร" โดยค่าเริ่มต้นคือ
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อทำการทดสอบโดย
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
env_inherit |
รายการสตริง ค่าเริ่มต้นคือ ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะรับค่าจากสภาพแวดล้อมภายนอกเมื่อการทดสอบดำเนินการโดย
แอตทริบิวต์นี้ใช้กับกฎแบบเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
size |
สตริง ระบุ "ความหนัก" ของเป้าหมายการทดสอบ นั่นคือ เวลา/ทรัพยากรที่ต้องใช้ในการเรียกใช้ การทดสอบ 1 หน่วยถือว่าเป็นการทดสอบ "เล็ก" การทดสอบการผสานรวม "ปานกลาง" และการทดสอบจากต้นทางถึงปลายทาง "ใหญ่" หรือ
"ใหญ่" Bazel ใช้ขนาดเพื่อกำหนดระยะหมดเวลาเริ่มต้น ซึ่งลบล้างได้โดยใช้แอตทริบิวต์ ขนาดทดสอบจะสอดคล้องกับระยะหมดเวลาเริ่มต้นต่อไปนี้และจะถือว่ามีการใช้ทรัพยากรในเครื่องสูงสุด
ระบบจะกำหนดตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
timeout |
สตริง ระยะเวลาที่คาดว่าจะเรียกใช้การทดสอบก่อนที่จะกลับ
แม้ว่าแอตทริบิวต์ขนาดของการทดสอบจะควบคุมการประมาณทรัพยากร แต่อาจตั้งค่าระยะหมดเวลาของการทดสอบแยกกัน หากไม่ระบุอย่างชัดเจน ระยะหมดเวลาจะขึ้นอยู่กับขนาดของการทดสอบ คุณลบล้างระยะหมดเวลาการทดสอบได้ด้วยแฟล็ก
สำหรับเวลาอื่นๆ นอกเหนือจากที่กล่าวมาข้างต้น คุณจะลบล้างการหมดเวลาของการทดสอบได้ด้วยแฟล็ก Bazel ของ ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
flaky |
บูลีน nonconfigurable ค่าเริ่มต้นคือ ทำเครื่องหมายการทดสอบว่าไม่น่าเชื่อถือ หากตั้งค่าไว้ จะดำเนินการทดสอบสูงสุด 3 ครั้ง โดยทำเครื่องหมายว่าล้มเหลวเฉพาะกรณีที่ล้มเหลวในแต่ละครั้ง โดยค่าเริ่มต้น แอตทริบิวต์นี้จะได้รับการตั้งค่าเป็น "เท็จ" และจะดำเนินการทดสอบเพียงครั้งเดียว โปรดทราบว่าเราไม่แนะนำให้ใช้แอตทริบิวต์นี้ โดยการทดสอบควรผ่านการทดสอบอย่างถูกต้องเมื่อยืนยันการยืนยันแล้ว |
||||||||||||||||||||
shard_count |
จำนวนเต็มที่ไม่เป็นลบน้อยกว่าหรือเท่ากับ 50 ค่าเริ่มต้นคือ ระบุจำนวนชาร์ดคู่ขนานที่จะใช้ทำการทดสอบ หากมีการตั้งค่า ค่านี้จะลบล้างการเรียนรู้ใดก็ตามที่ใช้เพื่อกำหนดจำนวนชาร์ดคู่ขนานที่จะทำการทดสอบ โปรดทราบว่ากฎทดสอบบางกฎอาจต้องเปิดใช้พารามิเตอร์นี้เพื่อเปิดใช้ชาร์ดดิ้งตั้งแต่แรก โปรดดู หากเปิดใช้ชาร์ดดิ้งทดสอบ ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม ชาร์ดดิ้งต้องใช้ตัวดำเนินการทดสอบเพื่อรองรับโปรโตคอลการชาร์ดทดสอบ หากไม่ตรง ก็มีแนวโน้มสูงที่จะทำการทดสอบทั้งหมดในทุกๆ ชาร์ด ซึ่งไม่ใช่สิ่งที่คุณต้องการ ดูการทดสอบชาร์ดดิ้งในสารานุกรมการทดสอบสำหรับรายละเอียดเกี่ยวกับชาร์ดดิ้ง |
||||||||||||||||||||
local |
บูลีน nonconfigurable ค่าเริ่มต้นคือ บังคับให้การทดสอบทำงานภายในเครื่องโดยไม่ใช้แซนด์บ็อกซ์ การตั้งค่านี้เป็น "จริง" เทียบเท่ากับการระบุ "ท้องถิ่น" เป็นแท็ก ( |
แอตทริบิวต์ทั่วไปสำหรับกฎไบนารีทั้งหมด (*_binary)
ส่วนนี้จะอธิบายแอตทริบิวต์ทั่วไปในกฎไบนารีทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
args |
รายการสตริงโดยขึ้นอยู่กับการแทนที่ $(location) และ "Makeตัวแปร" และการแปลงข้อมูลเป็นโทเค็นของ Bourne Shell nonconfigurable ค่าเริ่มต้นคือ
อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel จะส่งไปที่เป้าหมายเมื่อเรียกใช้ด้วยคำสั่ง
หมายเหตุ: ระบบจะไม่ส่งอาร์กิวเมนต์เมื่อคุณเรียกใช้เป้าหมายนอก Bazel (เช่น การเรียกใช้ไบนารีใน |
env |
พจนานุกรมของสตริง ค่าจะขึ้นอยู่กับการแทนที่ $(location) และ "Makeตัวแปร" ค่าเริ่มต้นคือ ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อ
แอตทริบิวต์นี้ใช้กับกฎแบบเนทีฟเท่านั้น เช่น
หมายเหตุ: ระบบจะไม่ตั้งค่าตัวแปรสภาพแวดล้อมเมื่อคุณเรียกใช้เป้าหมายนอก 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
ได้ก็คือเนมสเปซเป้าหมาย เป้าหมายไฟล์แต่ละรายการสอดคล้องกับไฟล์จริง 1 ไฟล์ในดิสก์ ("เนมสเปซของระบบไฟล์") โดยเป้าหมายกฎแต่ละข้ออาจสอดคล้องกับไฟล์จริง 0 หรืออย่างน้อย 1 ไฟล์ในดิสก์
อาจมีไฟล์ในดิสก์ที่ไม่มีเป้าหมายที่เกี่ยวข้อง ตัวอย่างเช่น ไฟล์ออบเจ็กต์ .o
ที่สร้างขึ้นระหว่างการคอมไพล์ C++ จะอ้างอิงจากภายในไฟล์ BUILD หรือจากบรรทัดคำสั่งไม่ได้
ด้วยวิธีนี้ เครื่องมือสร้างอาจซ่อนรายละเอียดการใช้งานบางอย่างของวิธีการทำงานของเครื่องมือดังกล่าว ซึ่งอธิบายโดยละเอียดเพิ่มเติมในการอ้างอิงแนวคิดของ BUILD