ส่วนนี้จะกำหนดคำศัพท์และแนวคิดต่างๆ ที่ใช้กันทั่วไปใน ฟังก์ชันหรือกฎการสร้างหลายรายการ
เนื้อหา
- การแยกโทเค็นของ 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 |
รายการป้ายกำกับ ค่าเริ่มต้นคือ
ไฟล์ที่กฎนี้ประมวลผลหรือรวมไว้ โดยทั่วไปจะแสดงรายการไฟล์โดยตรง แต่
อาจแสดงเป้าหมายของกฎ (เช่น กฎเฉพาะภาษาอาจกำหนดให้ไฟล์ที่แสดงต้องมีส่วนขยายไฟล์ที่เฉพาะเจาะจง |
แอตทริบิวต์ที่ใช้ร่วมกันในกฎการบิลด์ทั้งหมด
ส่วนนี้อธิบายแอตทริบิวต์ที่เพิ่มลงในกฎการสร้างทั้งหมดโดยนัย
แอตทริบิวต์ | คำอธิบาย |
---|---|
aspect_hints |
รายการป้ายกำกับ ค่าเริ่มต้นคือ รายการป้ายกำกับที่กำหนดเองซึ่งแสดงต่อ aspects (โดยเฉพาะอย่างยิ่ง aspects ที่เรียกใช้โดยการอ้างอิงย้อนกลับของกฎนี้) แต่ไม่ได้แสดงต่อการใช้งานของกฎนี้เอง โปรดดูรายละเอียดเกี่ยวกับผลลัพธ์ของคำใบ้เกี่ยวกับลักษณะที่เฉพาะเจาะจงในเอกสารประกอบสำหรับชุดกฎเฉพาะภาษา คุณอาจคิดว่าคำแนะนำด้านลักษณะเป็นทางเลือกที่สมบูรณ์กว่าแท็ก
เนื่องจากแท็กจะสื่อถึงสถานะบูลีนเท่านั้น (แท็กมีหรือไม่มีใน
ในทางปฏิบัติ คำแนะนำด้านลักษณะจะใช้เพื่อการทำงานร่วมกันระหว่างชุดกฎที่เฉพาะเจาะจงสำหรับภาษาต่างๆ
ตัวอย่างเช่น สมมติว่าคุณมีเป้าหมาย ดูตัวอย่างที่ชัดเจนได้ที่
แนวทางปฏิบัติแนะนำ
|
compatible_with |
รายการป้ายกำกับ
กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ รายการสภาพแวดล้อมที่สามารถสร้างเป้าหมายนี้ได้ นอกเหนือจาก สภาพแวดล้อมที่รองรับเริ่มต้น ซึ่งเป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel ที่ช่วยให้ผู้ใช้ประกาศได้ว่า เป้าหมายใดที่ขึ้นต่อกันได้และไม่ได้ เช่น ไบนารีที่สามารถติดตั้งใช้งานภายนอก ไม่ควรขึ้นอยู่กับไลบรารีที่มีโค้ดที่เป็นความลับของบริษัท ดูรายละเอียดได้ที่ ConstraintSemantics |
deprecation |
สตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ ข้อความแจ้งเตือนที่อธิบายซึ่งเชื่อมโยงกับเป้าหมายนี้ โดยปกติแล้วจะใช้เพื่อแจ้งให้ผู้ใช้ทราบว่าเป้าหมายล้าสมัยแล้ว หรือถูกแทนที่ด้วยกฎอื่น เป็นกฎส่วนตัวของแพ็กเกจ หรือ อาจถือว่าเป็นอันตรายด้วยเหตุผลบางประการ เราขอแนะนำให้ใส่ข้อมูลอ้างอิงบางอย่าง (เช่น หน้าเว็บ หมายเลขข้อบกพร่อง หรือ CL การย้ายข้อมูลตัวอย่าง) เพื่อให้ผู้ใช้ทราบได้อย่างง่ายดายว่าต้องทำการเปลี่ยนแปลงใดบ้างเพื่อหลีกเลี่ยงข้อความนี้ หากมีเป้าหมายใหม่ที่ใช้แทนได้ คุณควรย้ายข้อมูลผู้ใช้ทั้งหมดของเป้าหมายเก่า
แอตทริบิวต์นี้ไม่มีผลต่อวิธีสร้างสิ่งต่างๆ แต่
อาจส่งผลต่อเอาต์พุตการวินิจฉัยของเครื่องมือบิลด์ เครื่องมือบิลด์จะออก
คำเตือนเมื่อเป้าหมายในแพ็กเกจอื่น
ขึ้นอยู่กับกฎที่มีแอตทริบิวต์ การขึ้นต่อกันภายในแพ็กเกจจะได้รับการยกเว้นจากคำเตือนนี้ ดังนั้น เช่น การสร้างการทดสอบของกฎที่เลิกใช้งานแล้วจะไม่ พบคำเตือน หากเป้าหมายที่เลิกใช้งานแล้วขึ้นอยู่กับเป้าหมายอื่นที่เลิกใช้งานแล้ว ระบบจะไม่แสดงข้อความเตือน เมื่อผู้ใช้หยุดใช้แล้ว คุณจะนำเป้าหมายออกได้ |
exec_compatible_with |
รายการป้ายกำกับ
กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ
รายการของ
|
exec_group_compatible_with |
พจนานุกรมของสตริงไปยังรายการของป้ายกำกับ
กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ
พจนานุกรมของชื่อกลุ่มการดำเนินการไปยังรายการของ
|
exec_properties |
พจนานุกรมของสตริง ค่าเริ่มต้นคือ พจนานุกรมของสตริงที่จะเพิ่มลงใน หากมีคีย์ทั้งในพร็อพเพอร์ตี้ระดับแพลตฟอร์มและระดับเป้าหมาย ระบบจะนำค่ามาจากเป้าหมาย โดยสามารถนำหน้าคีย์ด้วยชื่อของกลุ่มการดำเนินการ ตามด้วย |
features |
รายการสตริงฟีเจอร์ ค่าเริ่มต้นคือ ฟีเจอร์คือแท็กสตริงที่เปิดหรือปิดใช้ในเป้าหมายได้ ความหมายของฟีเจอร์จะขึ้นอยู่กับกฎนั้นๆ แอตทริบิวต์ |
package_metadata |
รายการป้ายกำกับ
กำหนดค่าไม่ได้ ค่าเริ่มต้นคือแพ็กเกจ
รายการป้ายกำกับที่เชื่อมโยงกับข้อมูลเมตาเกี่ยวกับเป้าหมายนี้ โดยปกติแล้ว ป้ายกำกับจะเป็นกฎง่ายๆ ที่แสดงผลผู้ให้บริการค่าคงที่ กฎและแง่มุมต่างๆ อาจใช้ป้ายกำกับเหล่านี้เพื่อทำการวิเคราะห์เพิ่มเติมในกราฟการสร้าง
กรณีการใช้งาน Canonical คือกรณีของ rules_license
สำหรับกรณีการใช้งานดังกล่าว |
restricted_to |
รายการป้ายกำกับ
กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ รายการสภาพแวดล้อมที่สามารถสร้างเป้าหมายนี้ได้ แทน สภาพแวดล้อมที่รองรับเริ่มต้น
ซึ่งเป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel ดูรายละเอียดได้ที่
|
tags |
รายการสตริง กำหนดค่าไม่ได้
ค่าเริ่มต้นคือ
คุณใช้แท็กกับกฎใดก็ได้ แท็กในกฎการทดสอบและ
Bazel จะแก้ไขลักษณะการทำงานของโค้ดแซนด์บ็อกซ์หากพบคีย์เวิร์ดต่อไปนี้
ในแอตทริบิวต์
โดยทั่วไปแล้ว Tag ในการทดสอบจะใช้เพื่อใส่คำอธิบายประกอบเกี่ยวกับบทบาทของการทดสอบในกระบวนการแก้ไขข้อบกพร่องและการเผยแพร่ โดยปกติแล้ว แท็กจะมีประโยชน์มากที่สุดสําหรับการทดสอบ C++ และ Python ซึ่งไม่มีความสามารถในการเพิ่มคำอธิบายประกอบรันไทม์ การใช้แท็กและองค์ประกอบ size ช่วยให้มีความยืดหยุ่นในการรวบรวมชุดการทดสอบตามนโยบายการเช็คอินของโค้ดเบส
Bazel จะแก้ไขลักษณะการทำงานของการทดสอบหากพบคีย์เวิร์ดต่อไปนี้ในแอตทริบิวต์
|
target_compatible_with |
รายการป้ายกำกับ ค่าเริ่มต้นคือ
รายการ
เป้าหมายที่ขึ้นอยู่กับเป้าหมายที่ไม่เข้ากันโดยอ้อมจะถือว่าไม่เข้ากัน ระบบจะข้ามการสร้างและการทดสอบด้วย รายการที่ว่างเปล่า (ซึ่งเป็นค่าเริ่มต้น) หมายความว่าเป้าหมายเข้ากันได้กับทุกแพลตฟอร์ม
กฎทั้งหมดนอกเหนือจากกฎของ Workspace รองรับแอตทริบิวต์นี้
แอตทริบิวต์นี้จะไม่มีผลกับกฎบางอย่าง เช่น การระบุ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการข้ามเป้าหมายที่ไม่รองรับได้ที่หน้าแพลตฟอร์ม |
testonly |
บูลีน กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ
หาก
ในทำนองเดียวกัน กฎที่ไม่ได้เป็น
การทดสอบ ( แอตทริบิวต์นี้มีไว้เพื่อระบุว่าไม่ควรมีเป้าหมาย ในไบนารีที่เผยแพร่ไปยังเวอร์ชันที่ใช้งานจริง เนื่องจากมีการบังคับใช้ testonly ในเวลาบิลด์ ไม่ใช่เวลาเรียกใช้ และมีการแพร่กระจาย แบบไวรัลผ่านแผนผังการอ้างอิง จึงควรใช้อย่างรอบคอบ ตัวอย่างเช่น สตับและออบเจ็กต์จำลองที่มีประโยชน์สำหรับการทดสอบหน่วยอาจมีประโยชน์สำหรับการทดสอบการผสานรวมที่เกี่ยวข้องกับไบนารีเดียวกันซึ่งจะเผยแพร่ไปยังเวอร์ชันที่ใช้งานจริงด้วย ดังนั้นจึงไม่ควรทำเครื่องหมายว่า testonly ในทางกลับกัน กฎที่ เป็นอันตรายแม้เพียงแค่ลิงก์เข้าไป อาจเป็นเพราะกฎดังกล่าว ลบล้างลักษณะการทำงานปกติโดยไม่มีเงื่อนไข ควรทำเครื่องหมายเป็น testonly อย่างแน่นอน |
toolchains |
รายการป้ายกำกับ
กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ
ชุดเป้าหมายที่เป้าหมายนี้ได้รับอนุญาตให้เข้าถึงตัวแปรที่สร้าง เป้าหมายเหล่านี้เป็นอินสแตนซ์ของกฎที่ให้
โปรดทราบว่าแนวคิดนี้แตกต่างจาก
การแก้ปัญหา Toolchain
ที่ใช้โดยการใช้งานกฎสำหรับการกำหนดค่าที่ขึ้นอยู่กับแพลตฟอร์ม คุณไม่สามารถใช้แอตทริบิวต์นี้เพื่อระบุว่า |
visibility |
รายการป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นแตกต่างกัน
แอตทริบิวต์
สำหรับเป้าหมายที่ประกาศโดยตรงในไฟล์ BUILD หรือในมาโครเดิมที่เรียกจากไฟล์ BUILD ค่าเริ่มต้นคือ |
แอตทริบิวต์ที่ใช้ร่วมกันในกฎการทดสอบทั้งหมด (*_test)
ส่วนนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในกฎการทดสอบทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
รายการสตริง ซึ่งขึ้นอยู่กับ
$(location) และ
การแทนที่"สร้างตัวแปร" และ
การแยกโทเค็นของ Bourne Shell ค่าเริ่มต้นคือ อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel ส่งไปยังเป้าหมายเมื่อมีการ
เรียกใช้ด้วย
อาร์กิวเมนต์เหล่านี้จะส่งผ่านก่อน |
||||||||||||||||||||
env |
พจนานุกรมของสตริง ค่าอาจมีการแทนที่ $(location) และ "สร้างตัวแปร" ค่าเริ่มต้นคือ
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อ
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
env_inherit |
รายการสตริง ค่าเริ่มต้นคือ ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะรับค่าจาก
สภาพแวดล้อมภายนอกเมื่อ
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
size |
สตริง ระบุ "ความหนัก" ของเป้าหมายการทดสอบ ซึ่งหมายถึงเวลา/ทรัพยากรที่ต้องใช้ในการเรียกใช้ การทดสอบหน่วยถือเป็น "เล็ก" การทดสอบการผสานรวมถือเป็น "ปานกลาง" และการทดสอบแบบครบวงจรถือเป็น "ใหญ่" หรือ
"ใหญ่มาก" Bazel ใช้ขนาดเพื่อกำหนดการหมดเวลาเริ่มต้น ซึ่งสามารถลบล้างได้โดยใช้แอตทริบิวต์
ขนาดการทดสอบสอดคล้องกับระยะหมดเวลาเริ่มต้นต่อไปนี้และการใช้งานทรัพยากรในเครื่องสูงสุดโดยประมาณ
ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม
|
||||||||||||||||||||
timeout |
สตริง ระยะเวลาที่คาดว่าจะใช้ในการทดสอบก่อนที่จะกลับมา
แม้ว่าแอตทริบิวต์ขนาดของการทดสอบจะควบคุมการประมาณทรัพยากร แต่คุณก็ตั้งค่า
การหมดเวลาของการทดสอบแยกกันได้ หากไม่ได้ระบุอย่างชัดเจน ระบบจะกำหนด
การหมดเวลาตามขนาดของการทดสอบ คุณสามารถลบล้างการหมดเวลาของ
การทดสอบได้ด้วยแฟล็ก
สำหรับเวลาอื่นๆ นอกเหนือจากข้างต้น คุณสามารถลบล้างการหมดเวลาทดสอบได้ด้วย
ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม
|
||||||||||||||||||||
flaky |
บูลีน กำหนดค่าไม่ได้
ค่าเริ่มต้นคือ ทำเครื่องหมายการทดสอบว่าไม่น่าเชื่อถือ หากตั้งค่าไว้ จะเรียกใช้การทดสอบสูงสุด 3 ครั้ง และทำเครื่องหมายว่าไม่สำเร็จก็ต่อเมื่อการทดสอบไม่สำเร็จทุกครั้ง โดยค่าเริ่มต้น แอตทริบิวต์นี้จะตั้งค่าเป็น False และการทดสอบจะ ดำเนินการเพียงครั้งเดียว โปรดทราบว่าโดยทั่วไปเราไม่แนะนำให้ใช้แอตทริบิวต์นี้ การทดสอบควรผ่านได้อย่างน่าเชื่อถือเมื่อมีการยืนยัน |
||||||||||||||||||||
shard_count |
จำนวนเต็มที่ไม่เป็นลบซึ่งน้อยกว่าหรือเท่ากับ 50 ค่าเริ่มต้นคือ ระบุจำนวนชาร์ดแบบขนาน ที่จะใช้เรียกใช้การทดสอบ หากตั้งค่าไว้ ค่านี้จะลบล้างฮิวริสติกที่ใช้ในการกำหนดจำนวน
ชาร์ดแบบขนานที่จะใช้ในการทดสอบ โปรดทราบว่ากฎการทดสอบบางอย่างอาจต้องใช้พารามิเตอร์นี้เพื่อเปิดใช้การแยกส่วนตั้งแต่แรก ดู หากเปิดใช้การแบ่งการทดสอบ ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม การแบ่งพาร์ติชันต้องใช้โปรแกรมเรียกใช้การทดสอบที่รองรับโปรโตคอลการแบ่งพาร์ติชันการทดสอบ หากไม่เป็นเช่นนั้น ก็มีแนวโน้มสูงที่จะเรียกใช้การทดสอบทุกรายการในทุก Shard ซึ่ง ไม่ใช่สิ่งที่คุณต้องการ ดูรายละเอียดเกี่ยวกับการแบ่งกลุ่มได้ที่ การแบ่งกลุ่มการทดสอบ ในสารานุกรมการทดสอบ |
||||||||||||||||||||
local |
บูลีน กำหนดค่าไม่ได้
ค่าเริ่มต้นคือ บังคับให้เรียกใช้การทดสอบในเครื่องโดยไม่ต้องใช้แซนด์บ็อกซ์ การตั้งค่านี้เป็น True จะเทียบเท่ากับการระบุ "local" เป็นแท็ก
( |
แอตทริบิวต์ที่ใช้ร่วมกันในกฎไบนารีทั้งหมด (*_binary)
ส่วนนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในกฎไบนารีทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
args |
รายการสตริง โดยขึ้นอยู่กับ
$(location) และ
"Make variable" substitution, and
Bourne shell tokenization;
nonconfigurable;
ค่าเริ่มต้นคือ
อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel จะส่งไปยังเป้าหมายเมื่อมีการเรียกใช้
ไม่ว่าจะโดยคำสั่ง
หมายเหตุ: ระบบจะไม่ส่งอาร์กิวเมนต์เมื่อคุณเรียกใช้เป้าหมาย
ภายนอก Bazel (เช่น โดยการเรียกใช้ไบนารีใน
|
env |
พจนานุกรมของสตริง ค่าต้องเป็นไปตามการแทนที่ $(location) และ "สร้างตัวแปร" ค่าเริ่มต้นคือ ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อ
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น
หมายเหตุ: ระบบจะไม่ตั้งค่าตัวแปรสภาพแวดล้อมเมื่อคุณเรียกใช้เป้าหมายนอก Bazel (เช่น โดยการเรียกใช้ไบนารีใน |
output_licenses |
รายการสตริง ค่าเริ่มต้นคือ ใบอนุญาตของไฟล์เอาต์พุตที่ไบนารีนี้สร้างขึ้น ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้แล้ว อย่า ใช้สิ่งนี้ |
แอตทริบิวต์ที่กำหนดค่าได้
แอตทริบิวต์ส่วนใหญ่เป็นแบบ "กำหนดค่าได้" ซึ่งหมายความว่าค่าของแอตทริบิวต์อาจเปลี่ยนแปลงเมื่อ สร้างเป้าหมายด้วยวิธีต่างๆ โดยเฉพาะอย่างยิ่ง แอตทริบิวต์ที่กำหนดค่าได้ อาจแตกต่างกันไปตามแฟล็กที่ส่งไปยังบรรทัดคำสั่ง 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