ส่วนนี้จะกําหนดคําศัพท์และแนวคิดต่างๆ ที่พบได้ทั่วไปในฟังก์ชันหรือกฎการสร้างหลายรายการ
เนื้อหา
- การแปลงข้อมูล 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 จะแก้ไขลักษณะการทํางานของโค้ดแซนด์บ็อกซ์หากพบคีย์เวิร์ดต่อไปนี้ในแอตทริบิวต์
โดยทั่วไปแล้ว แท็กในการทดสอบจะใช้เพื่อกำกับเนื้อหาเกี่ยวกับบทบาทของการทดสอบในกระบวนการแก้ไขข้อบกพร่องและเผยแพร่ โดยทั่วไปแล้ว แท็กจะมีประโยชน์มากที่สุดสำหรับการทดสอบ C++ และ Python ซึ่งไม่มีความสามารถในการกำกับเนื้อหารันไทม์ การใช้แท็กและองค์ประกอบขนาดช่วยให้คุณประกอบชุดทดสอบตามนโยบายการเช็คอินโค้ดเบสได้อย่างยืดหยุ่น
Bazel จะแก้ไขลักษณะการทํางานของการทดสอบหากพบคีย์เวิร์ดต่อไปนี้ในแอตทริบิวต์
|
target_compatible_with |
รายการป้ายกํากับ ค่าเริ่มต้นคือ
รายการ ระบบจะถือว่าเป้าหมายที่ขึ้นกับเป้าหมายที่ใช้ร่วมกันไม่ได้ในเชิงการเปลี่ยนรูปแบบนั้นใช้ร่วมกันไม่ได้ ระบบจะข้ามไฟล์เหล่านี้สำหรับการสร้างและการทดสอบด้วย รายการว่าง (ซึ่งเป็นค่าเริ่มต้น) หมายความว่าเป้าหมายเข้ากันได้กับทุกแพลตฟอร์ม
กฎทั้งหมดที่ไม่ใช่กฎ Workspace รองรับแอตทริบิวต์นี้
สําหรับกฎบางรายการ แอตทริบิวต์นี้จะไม่มีผล เช่น การระบุ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการข้ามเป้าหมายที่เข้ากันไม่ได้ได้ที่หน้าแพลตฟอร์ม |
testonly |
บูลีน ไม่สามารถกําหนดค่าได้ ค่าเริ่มต้นคือ
หากเป็น
หรือกล่าวอีกนัยหนึ่งคือ กฎที่ไม่ใช่
การทดสอบ (กฎ แอตทริบิวต์นี้มีไว้เพื่อระบุว่าเป้าหมายไม่ควรอยู่ในไบนารีที่เผยแพร่ไปยังเวอร์ชันที่ใช้งานจริง เนื่องจาก testonly จะบังคับใช้ที่เวลาสร้าง ไม่ใช่รันไทม์ และเผยแพร่ไปทั่วทั้งต้นไม้ของข้อกำหนด คุณจึงควรใช้อย่างรอบคอบ ตัวอย่างเช่น สแต็บและข้อมูลจำลองที่มีประโยชน์สำหรับการทดสอบหน่วยอาจมีประโยชน์สำหรับการทดสอบการผสานรวมที่เกี่ยวข้องกับไบนารีเดียวกันที่จะเผยแพร่ไปยังเวอร์ชันที่ใช้งานจริงด้วย ดังนั้นจึงไม่ควรทําเครื่องหมายเป็น testonly ในทางกลับกัน กฎที่เป็นอันตรายต่อลิงก์ อาจเป็นเพราะมีการลบล้างลักษณะการทำงานปกติโดยไม่มีเงื่อนไข ควรทำเครื่องหมายเป็น testonly |
toolchains |
รายการป้ายกํากับ;
ไม่สามารถกําหนดค่าได้; ค่าเริ่มต้นคือ
ชุดเป้าหมายที่มีสร้างตัวแปรซึ่งเป้าหมายนี้ได้รับอนุญาตให้เข้าถึง เป้าหมายเหล่านี้คืออินสแตนซ์ของกฎที่ให้
โปรดทราบว่าการดำเนินการนี้แตกต่างจากแนวคิดการแก้ไข Toolchain ที่ใช้ในการติดตั้งใช้งานกฎสำหรับการกำหนดค่าที่ขึ้นอยู่กับแพลตฟอร์ม คุณไม่สามารถใช้แอตทริบิวต์นี้เพื่อระบุ |
visibility |
รายการป้ายกํากับ; ไม่สามารถกําหนดค่าได้; ค่าเริ่มต้นจะแตกต่างกันไป
แอตทริบิวต์
สําหรับเป้าหมายที่ประกาศในไฟล์ BUILD โดยตรงหรือในมาโครเดิมที่เรียกใช้จากไฟล์ BUILD ค่าเริ่มต้นคือ |
แอตทริบิวต์ที่ใช้ร่วมกันกับกฎทดสอบทั้งหมด (*_test)
ส่วนนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันกับกฎทดสอบทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
รายการสตริง ขึ้นอยู่กับการแทนที่ $(location) และ "Make variable" รวมถึง การแยกสตริงของ Bourne Shell ค่าเริ่มต้นคือ อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel ส่งไปยังเป้าหมายเมื่อเรียกใช้ด้วย
ระบบจะส่งอาร์กิวเมนต์เหล่านี้ก่อนค่า |
||||||||||||||||||||
env |
พจนานุกรมสตริง ค่าจะขึ้นอยู่กับการแทนที่ $(location) และ "Make variable" ค่าเริ่มต้นคือ
ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อทำการทดสอบโดย
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
env_inherit |
รายการสตริง ค่าเริ่มต้นคือ ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะรับค่าจากสภาพแวดล้อมภายนอกเมื่อ
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น |
||||||||||||||||||||
size |
สตริง ระบุ "ความซับซ้อน" ของเป้าหมายการทดสอบ: ระยะเวลา/ทรัพยากรที่จําเป็นในการเรียกใช้ การทดสอบหน่วยถือว่า "เล็ก" การทดสอบการผสานรวมถือว่า "กลาง" และการทดสอบจากต้นทางถึงปลายทางถือว่า "ใหญ่" หรือ "ใหญ่มาก" Bazel ใช้ขนาดเพื่อกำหนดการหมดเวลาเริ่มต้น ซึ่งสามารถลบล้างได้โดยใช้แอตทริบิวต์ ขนาดการทดสอบสอดคล้องกับการหมดเวลาเริ่มต้นและการคาดการณ์การใช้ทรัพยากรในเครื่องสูงสุดต่อไปนี้
ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
timeout |
สตริง ระยะเวลาที่คาดว่าการทดสอบจะทํางานก่อนที่จะแสดงผล
แม้ว่าแอตทริบิวต์ขนาดของการทดสอบจะควบคุมการประมาณทรัพยากร แต่คุณก็ตั้งค่าการหมดเวลาของการทดสอบแยกต่างหากได้ หากไม่ได้ระบุไว้อย่างชัดเจน ระบบจะกำหนดเวลาหมดอายุตามขนาดของการทดสอบ คุณลบล้างการหมดเวลาการทดสอบได้ด้วย Flag
สำหรับเวลาที่ไม่ใช่เวลาข้างต้น คุณสามารถลบล้างการหมดเวลาการทดสอบได้ด้วย
ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม |
||||||||||||||||||||
flaky |
บูลีน ไม่สามารถกําหนดค่าได้
ค่าเริ่มต้นคือ ทําเครื่องหมายการทดสอบว่าไม่น่าเชื่อถือ หากตั้งค่าไว้ ระบบจะทำการทดสอบไม่เกิน 3 ครั้ง โดยจะทำเครื่องหมายว่าไม่ผ่านก็ต่อเมื่อทดสอบไม่ผ่านทุกครั้ง โดยค่าเริ่มต้น แอตทริบิวต์นี้จะตั้งค่าเป็น False และการทดสอบจะทําเพียงครั้งเดียว โปรดทราบว่าโดยทั่วไปเราไม่แนะนำให้ใช้แอตทริบิวต์นี้ เนื่องจากการทดสอบควรผ่านอย่างน่าเชื่อถือเมื่อการยืนยันได้รับการสนับสนุน |
||||||||||||||||||||
shard_count |
จํานวนเต็มที่ไม่ติดลบซึ่งน้อยกว่าหรือเท่ากับ 50 ค่าเริ่มต้นคือ ระบุจํานวนชาร์ดแบบขนานที่จะใช้เพื่อเรียกใช้การทดสอบ หากตั้งค่าไว้ ค่านี้จะลบล้างการหาค่าประมาณที่ใช้เพื่อกําหนดจํานวนกลุ่มที่ทำงานพร้อมกันที่จะใช้ทดสอบ โปรดทราบว่ากฎการทดสอบบางอย่างอาจต้องใช้พารามิเตอร์นี้เพื่อเปิดใช้การแยกข้อมูลตั้งแต่แรก โปรดดู หากเปิดใช้การแยกกลุ่มการทดสอบ ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม การแยกข้อมูลต้องใช้โปรแกรมรันทดสอบที่รองรับโปรโตคอลการแยกข้อมูลทดสอบ หากไม่มี เป็นไปได้ว่าระบบจะทำการทดสอบทุกรายการในทุกกลุ่ม ซึ่งไม่ใช่สิ่งที่คุณต้องการ ดูรายละเอียดการแยกกลุ่มได้ที่หัวข้อการแยกกลุ่มทดสอบในสารานุกรมการทดสอบ |
||||||||||||||||||||
local |
บูลีน ไม่สามารถกําหนดค่าได้
ค่าเริ่มต้นคือ บังคับให้เรียกใช้การทดสอบในเครื่องโดยไม่ต้องใช้แซนด์บ็อกซ์ การตั้งค่านี้เป็น True เทียบเท่ากับการให้แท็ก "local" ( |
แอตทริบิวต์ที่ใช้ร่วมกันสำหรับกฎไบนารีทั้งหมด (*_binary)
ส่วนนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันกับกฎไบนารีทั้งหมด
แอตทริบิวต์ | คำอธิบาย |
---|---|
args |
รายการสตริง ขึ้นอยู่กับการแทนที่ $(location) และ "Make variable" และ การแยกสตริงของ Bourne Shell ไม่สามารถกำหนดค่าได้ โดยค่าเริ่มต้นคือ
อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel จะส่งไปยังเป้าหมายเมื่อมีการเรียกใช้ ไม่ว่าจะด้วยคำสั่ง
หมายเหตุ: ระบบจะไม่ส่งอาร์กิวเมนต์เมื่อคุณเรียกใช้เป้าหมายนอก Bazel (เช่น โดยการเรียกใช้ไบนารีใน |
env |
พจนานุกรมสตริง ค่าจะขึ้นอยู่กับการแทนที่ $(location) และ "Make variable" ค่าเริ่มต้นคือ ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อ
แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น
หมายเหตุ: ระบบจะไม่ตั้งค่าตัวแปรสภาพแวดล้อมเมื่อคุณเรียกใช้เป้าหมายนอก Bazel (เช่น โดยการเรียกใช้ไบนารีใน |
output_licenses |
รายการสตริง ค่าเริ่มต้นคือ ใบอนุญาตของไฟล์เอาต์พุตที่ไบนารีนี้สร้างขึ้น ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้อีกต่อไป อย่าใช้ |
แอตทริบิวต์ที่กำหนดค่าได้
แอตทริบิวต์ส่วนใหญ่ "กําหนดค่าได้" ซึ่งหมายความว่าค่าของแอตทริบิวต์อาจเปลี่ยนแปลงเมื่อสร้างเป้าหมายด้วยวิธีอื่น กล่าวโดยละเอียดคือ แอตทริบิวต์ที่กำหนดค่าได้อาจแตกต่างกันไปตาม 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()
จะเลือกสาขาใด ตัวอย่างเช่น มาโครจะเปลี่ยนลักษณะการทำงานตามสาขาที่เลือกไม่ได้ และbazel query
จะเดาอย่างถี่ถ้วนเกี่ยวกับข้อกำหนดที่พารามิเตอร์เป้าหมายกำหนดได้เท่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ 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