ไฟล์ BUILD

รายงานปัญหา

เมธอดที่มีในไฟล์ BUILD และโปรดดู ฟังก์ชัน เพิ่มเติมและกฎการสร้างที่สามารถใช้ในไฟล์ BUILD ได้ด้วย

สมาชิก

Depset

depset depset(direct=None, order="default", *, transitive=None)

สร้าง Depset พารามิเตอร์ direct คือรายการองค์ประกอบโดยตรงของ Depset และพารามิเตอร์ transitive คือรายการของ Depset ที่มีองค์ประกอบกลายเป็นองค์ประกอบโดยอ้อมของ Depset ที่สร้างขึ้น พารามิเตอร์ order จะระบุลำดับการส่งคืนองค์ประกอบเมื่อแปลง Depset เป็นรายการ ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของรายการ

องค์ประกอบทั้งหมด (โดยตรงและโดยอ้อม) ของดีเซตต้องเป็นประเภทเดียวกัน ตามที่ได้รับจากนิพจน์ type(x)

เนื่องจากชุดที่ใช้แฮชใช้เพื่อกำจัดข้อมูลซ้ำระหว่างทำซ้ำ องค์ประกอบทั้งหมดของ Depset จึงควรแฮชได้ อย่างไรก็ตาม ปัจจุบันค่าไม่แปรผันนี้ยังไม่ได้รับการตรวจสอบอย่างสม่ำเสมอในตัวสร้างทั้งหมด ใช้แฟล็ก --incompatible_always_check_depset_elements เพื่อเปิดใช้การตรวจสอบที่สอดคล้องกัน นี่จะเป็นลักษณะการทำงานเริ่มต้นในรุ่นต่อๆ ไป ดูปัญหา 10313

นอกจากนี้ องค์ประกอบต่างๆ จะต้องเปลี่ยนแปลงไม่ได้ในปัจจุบัน แม้ว่าจะมีการผ่อนปรนข้อจำกัดนี้ในอนาคต

ลำดับของ Depset ที่สร้างควรใช้ร่วมกันได้กับลำดับของ Depset transitive คำสั่งซื้อ "default" ใช้ร่วมกับคำสั่งซื้ออื่นๆ ได้ คำสั่งซื้ออื่นๆ ทั้งหมดจะใช้ร่วมกับคำสั่งซื้ออื่นได้เท่านั้น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
direct sequence หรือ None ค่าเริ่มต้นคือ None
รายการองค์ประกอบ direct ของ Depset
order ค่าเริ่มต้นคือ "default"
กลยุทธ์การส่งผ่านสำหรับ Depset ใหม่ ดูค่าที่เป็นไปได้ที่นี่
transitive ลำดับของ depset หรือ None โดยค่าเริ่มต้นคือ None
รายการของ Depset ที่องค์ประกอบจะกลายเป็นองค์ประกอบโดยอ้อมของ Depset

existing_rule

unknown existing_rule(name)

แสดงผลออบเจ็กต์ที่เหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้ซึ่งอธิบายแอตทริบิวต์ของกฎที่สร้างอินสแตนซ์ในแพ็กเกจของเทรดนี้ หรือแสดงผล None หากไม่มีอินสแตนซ์กฎสำหรับชื่อนั้น

ในที่นี้ ออบเจ็กต์ที่มีลักษณะเหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้หมายถึงออบเจ็กต์ที่เปลี่ยนแปลงไม่ได้อย่างมาก x ที่รองรับการทำซ้ำแบบเหมือนคำสั่ง, len(x), name in x, x[name], x.get(name), x.items(), x.keys() และ x.values()

หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view แล้ว ระบบจะแสดงผลคำสั่งที่เปลี่ยนแปลงได้รายการใหม่ซึ่งมีเนื้อหาเดียวกันแทน

ผลลัพธ์จะมีรายการสำหรับแต่ละแอตทริบิวต์ ยกเว้นแอตทริบิวต์ส่วนตัว (ชื่อที่ไม่ได้ขึ้นต้นด้วยตัวอักษร) และแอตทริบิวต์เดิมไม่กี่ประเภทที่ไม่สามารถนำเสนอได้ นอกจากนี้ คำสั่งยังมีรายการสำหรับ name และ kind ของอินสแตนซ์กฎ (เช่น 'cc_binary')

ค่าของผลลัพธ์แสดงค่าแอตทริบิวต์ดังนี้

  • แอตทริบิวต์ของประเภท str, int และบูลีนจะแสดงตามที่เป็นอยู่
  • ระบบจะแปลงป้ายกำกับเป็นสตริงในรูปแบบ ':foo' สำหรับเป้าหมายในแพ็กเกจเดียวกัน หรือ '//pkg:name' สำหรับเป้าหมายในแพ็กเกจอื่น
  • รายการจะแสดงเป็น "Tuple" และระบบจะแปลงเป็น " Dicts" ในรูปแบบใหม่ องค์ประกอบต่างๆ จะได้รับการแปลงซ้ำในวิธีเดียวกัน
  • ค่า select จะแสดงผลพร้อมเนื้อหาที่เปลี่ยนรูปแบบตามที่อธิบายไว้ข้างต้น
  • แอตทริบิวต์ที่ไม่ได้ระบุค่าระหว่างการเริ่มต้นกฎและที่มีการคํานวณค่าเริ่มต้น ระบบจะยกเว้นจากผลลัพธ์ (ค่าเริ่มต้นที่คํานวณแล้วจะคํานวณไม่ได้จนกว่าจะเข้าสู่ช่วงการวิเคราะห์)

หากเป็นไปได้ ให้หลีกเลี่ยงการใช้ฟังก์ชันนี้ ทำให้ไฟล์ BUILD ไม่เป็นระเบียบและขึ้นอยู่กับลำดับ โปรดระวังว่า Conversion นี้แตกต่างจาก Conversion อีก 2 รายการของกฎแบบมีแอตทริบิวต์จากรูปแบบภายในเป็น Starlark อยู่แบบนั้น รายการหนึ่งใช้โดยค่าเริ่มต้นที่คำนวณไว้ ส่วนอีกรายการใช้โดย ctx.attr.foo

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name ต้องระบุ
ชื่อของเป้าหมาย

existing_rules

unknown existing_rules()

แสดงผลออบเจ็กต์เหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้ซึ่งอธิบายกฎจนถึงปัจจุบันในแพ็กเกจของเทรดนี้ แต่ละรายการของออบเจ็กต์ที่มีลักษณะเหมือนคำสั่งจะแมปชื่อของอินสแตนซ์กฎกับผลลัพธ์ที่ existing_rule(name) จะแสดง

ในที่นี้ ออบเจ็กต์ที่มีลักษณะเหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้หมายถึงออบเจ็กต์ที่เปลี่ยนแปลงไม่ได้อย่างมาก x ที่รองรับการทำซ้ำแบบเหมือนคำสั่ง, len(x), name in x, x[name], x.get(name), x.items(), x.keys() และ x.values()

หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view แล้ว ระบบจะแสดงผลคำสั่งที่เปลี่ยนแปลงได้รายการใหม่ซึ่งมีเนื้อหาเดียวกันแทน

หมายเหตุ: หากเป็นไปได้ ให้หลีกเลี่ยงการใช้ฟังก์ชันนี้ ทำให้ไฟล์ BUILD ไม่เป็นระเบียบและขึ้นอยู่กับลำดับ นอกจากนี้ หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view ฟังก์ชันนี้อาจมีค่าใช้จ่ายสูง โดยเฉพาะหากเรียกใช้ภายในลูป

exports_files

None exports_files(srcs, visibility=None, licenses=None)

ระบุรายการไฟล์ที่เป็นของแพ็กเกจนี้ซึ่งส่งออกไปยังแพ็กเกจอื่นๆ

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
srcs sequence ของ strings; required
รายการไฟล์ที่จะส่งออก
visibility ลำดับ หรือ None ค่าเริ่มต้นคือ None
สามารถระบุการประกาศระดับการเข้าถึงได้ ไฟล์จะปรากฏแก่เป้าหมายที่ระบุ หากไม่ได้ระบุระดับการเข้าถึง ไฟล์จะแสดงในทุกแพ็กเกจ
licenses ลำดับของสตริง หรือ None ค่าเริ่มต้นคือ None
ใบอนุญาตที่ต้องระบุ

Glob

sequence glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob จะแสดงผลรายการไฟล์ที่เปลี่ยนแปลงและจัดเรียงได้ใหม่ของไฟล์ในแพ็กเกจปัจจุบันที่:
  • ตรงกับรูปแบบอย่างน้อย 1 รายการใน include
  • ไม่ตรงกับรูปแบบใดๆ ใน exclude (ค่าเริ่มต้น [])
หากเปิดใช้อาร์กิวเมนต์ exclude_directories (ตั้งค่าเป็น 1) ไฟล์ประเภทไดเรกทอรีจะไม่แสดงในผลลัพธ์ (ค่าเริ่มต้น 1)

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
include ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะรวม
exclude ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะยกเว้น
exclude_directories ค่าเริ่มต้นคือ 1
การแจ้งว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้นคือ unbound
เราอนุญาตให้รูปแบบ glob จับคู่ไม่ได้เลยหรือไม่ หาก "allow_เว้นว่าง" เป็น "เท็จ" รูปแบบการรวมแต่ละรายการจะต้องตรงกับรายการ และผลลัพธ์สุดท้ายต้องไม่ว่างเปล่า (หลังจากยกเว้นการจับคู่ของรูปแบบ "ยกเว้น" แล้ว)

module_name

string module_name()

ชื่อของโมดูล Bazel ที่เชื่อมโยงกับที่เก็บของแพ็กเกจนี้ หากแพ็กเกจนี้มาจากที่เก็บที่กำหนดไว้ใน WORKSPACE แทนที่จะเป็น MODULE.bazel แพ็กเกจนี้จะว่างเปล่า สำหรับที่เก็บซึ่งส่วนขยายโมดูลสร้างขึ้น นี่คือชื่อของโมดูลที่โฮสต์ส่วนขยาย ซึ่งเหมือนกับช่อง module.name ที่เห็นใน module_ctx.modules อาจส่งคืน None

module_version

string module_version()

เวอร์ชันของโมดูล Bazel ที่เชื่อมโยงกับที่เก็บของแพ็กเกจนี้ หากแพ็กเกจนี้มาจากที่เก็บที่กำหนดไว้ใน WORKSPACE แทนที่จะเป็น MODULE.bazel แพ็กเกจนี้จะว่างเปล่า สำหรับที่เก็บซึ่งส่วนขยายโมดูลสร้างขึ้น นี่คือเวอร์ชันของโมดูลที่โฮสต์ส่วนขยาย ซึ่งเหมือนกับช่อง module.version ที่เห็นใน module_ctx.modules อาจส่งคืน None

package_group

None package_group(name, packages=[], includes=[])

ฟังก์ชันนี้จะกำหนดชุดของแพ็กเกจและกำหนดป้ายกำกับให้กับกลุ่ม สามารถอ้างอิงป้ายกำกับได้ในแอตทริบิวต์ visibility

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้
packages ลำดับของสตริง ค่าเริ่มต้นคือ []
การแจกแจงแพ็กเกจทั้งหมดในกลุ่มนี้
includes ลำดับของสตริง ค่าเริ่มต้นคือ []
กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในรายการนี้

package_name

string package_name()

ชื่อแพ็กเกจที่ประเมิน เช่น ในไฟล์ BUILD some/package/BUILD ค่าจะเป็น some/package หากไฟล์ BUILD เรียกฟังก์ชันที่กำหนดไว้ในไฟล์ .bzl แล้ว package_name() จะตรงกับแพ็กเกจไฟล์ BUILD ของผู้โทร ฟังก์ชันนี้เทียบเท่ากับตัวแปร PACKAGE_NAME ที่เลิกใช้งานแล้ว

package_relative_label

Label package_relative_label(input)

แปลงสตริงอินพุตเป็นออบเจ็กต์ Label ในบริบทของแพ็กเกจที่เริ่มต้นอยู่ในขณะนี้ (ซึ่งก็คือไฟล์ BUILD ที่มาโครปัจจุบันกำลังดำเนินการอยู่) หากอินพุตเป็น Label อยู่แล้ว จะส่งกลับโดยไม่เปลี่ยนแปลง

ฟังก์ชันนี้อาจถูกเรียกได้ในขณะที่ประเมินไฟล์ BUILD และมาโครที่ไฟล์ดังกล่าวเรียกโดยตรงหรือโดยอ้อมเท่านั้น ฟังก์ชันนี้อาจไม่ได้รับการเรียกในฟังก์ชันการใช้งานกฎ (เช่น)

ผลลัพธ์ของฟังก์ชันนี้เป็นค่า Label เดียวกันกับที่สร้างขึ้นโดยการส่งสตริงที่ระบุไปยังแอตทริบิวต์ที่เป็นค่าป้ายกำกับของเป้าหมายที่ประกาศในไฟล์ BUILD

หมายเหตุการใช้งาน: ความแตกต่างระหว่างฟังก์ชันนี้กับ Label() คือ Label() ใช้บริบทของแพ็กเกจของไฟล์ .bzl ที่เรียกใช้ฟังก์ชันนี้ ไม่ใช่แพ็กเกจของไฟล์ BUILD ใช้ Label() เมื่อคุณต้องการอ้างอิงเป้าหมายแบบคงที่ซึ่งมีการฮาร์ดโค้ดลงในมาโคร เช่น คอมไพเลอร์ ใช้ package_relative_label() เมื่อคุณต้องการทำให้สตริงป้ายกำกับที่ไฟล์ BUILD ระบุให้เป็นมาตรฐานสำหรับออบเจ็กต์ Label (ไม่มีวิธีแปลงสตริงเป็น Label ในบริบทของแพ็กเกจที่ไม่ใช่ไฟล์ BUILD หรือไฟล์ .bzl ในการเรียกใช้ ด้วยเหตุนี้ มาโครภายนอกควรจะส่งออบเจ็กต์ป้ายกำกับไปยังมาโครภายในแทนสตริงป้ายกำกับเสมอ)

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
input string หรือป้ายกำกับ ต้องระบุ
สตริงป้ายกำกับอินพุตหรือออบเจ็กต์ป้ายกำกับ ถ้าผ่านออบเจ็กต์ป้ายกำกับ ออบเจ็กต์นั้นจะแสดงผลตามที่เป็น

repository_name

string repository_name()

ชื่อของที่เก็บที่ใช้เรียกกฎหรือส่วนขยายของบิลด์ ตัวอย่างเช่น ในแพ็กเกจที่เรียกใช้โดยข้อความ WORKSPACE local_repository(name='local', path=...) ระบบจะตั้งค่าเป็น @local ในแพ็กเกจในที่เก็บหลัก แพ็กเกจดังกล่าวจะตั้งค่าเป็น @ ฟังก์ชันนี้เทียบเท่ากับตัวแปร REPOSITORY_NAME ที่เลิกใช้งานแล้ว

เลือก

unknown select(x, no_match_error='')

select() เป็นฟังก์ชันตัวช่วยที่ทำให้แอตทริบิวต์ของกฎกำหนดค่าได้ ดูรายละเอียดได้ที่สารานุกรมสร้าง

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x required
ไดเรกทอรีที่แมปเงื่อนไขการกําหนดค่ากับค่า แต่ละคีย์คือป้ายกำกับหรือสตริงป้ายกำกับที่ระบุอินสแตนซ์ config_setting หรือrestriction_value ดูเอกสารเกี่ยวกับมาโครเพื่อดูว่าควรใช้ป้ายกำกับแทนสตริงเมื่อใด
no_match_error ค่าเริ่มต้นคือ ''
ข้อผิดพลาดที่กำหนดเองที่ไม่บังคับเพื่อรายงานหากไม่มีเงื่อนไขที่ตรงกัน

แพ็กเกจย่อย

sequence subpackages(include, exclude=[], allow_empty=False)

แสดงรายการแบบเปลี่ยนแปลงได้ที่เปลี่ยนแปลงใหม่ของแพ็กเกจย่อยโดยตรงทุกๆ แพ็กเกจของแพ็กเกจปัจจุบัน โดยไม่คำนึงถึงความลึกของไดเรกทอรีของระบบไฟล์ ระบบจะจัดเรียงรายการที่แสดงผลและมีชื่อของแพ็กเกจย่อยที่สัมพันธ์กับแพ็กเกจปัจจุบัน ขอแนะนำให้ใช้เมธอดในโมดูล bazel_skylib.subpackages แทนการเรียกฟังก์ชันนี้โดยตรง

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
include ลำดับของสตริง ต้องระบุ
รายการรูปแบบ glob ที่จะรวมไว้ในการสแกนแพ็กเกจย่อย
exclude ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะยกเว้นจากการสแกนแพ็กเกจย่อย
allow_empty ค่าเริ่มต้นคือ False
เราจะล้มเหลวหรือไม่หากการเรียกแสดงรายการที่ว่างเปล่า โดยค่าเริ่มต้น รายการที่ว่างเปล่าจะแสดงข้อผิดพลาดที่อาจเกิดขึ้นในไฟล์ BUILD ซึ่งการเรียกไปยัง subpackages() เยอะเกินไป ตั้งค่าเป็น "จริง" จะช่วยให้ฟังก์ชันนี้ประสบความสําเร็จในกรณีดังกล่าว