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