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