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