ไฟล์ BUILD

รายงานปัญหา Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

เมธอดที่ใช้ได้ในไฟล์ BUILD ดูสารานุกรมการสร้างสำหรับฟังก์ชันและกฎการสร้างเพิ่มเติม ซึ่งใช้ในไฟล์ BUILD ได้ด้วย

สมาชิก

depset

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

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

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

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

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

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

พารามิเตอร์

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

existing_rule

unknown existing_rule(name)

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

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

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

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

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

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

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

พารามิเตอร์

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

existing_rules

unknown existing_rules()

แสดงผลออบเจ็กต์ที่คล้ายกับพจนานุกรมที่ไม่เปลี่ยนแปลงซึ่งอธิบายกฎที่สร้างขึ้นจนถึงตอนนี้ในแพ็กเกจของเธรดนี้ แต่ละรายการของออบเจ็กต์ที่คล้ายกับ Dict จะแมปชื่อของอินสแตนซ์กฎกับผลลัพธ์ที่ 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 ลำดับของสตริง ต้องระบุ
รายการไฟล์ที่จะส่งออก
visibility sequence หรือ 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_empty` เป็น False รูปแบบการรวมแต่ละรายการต้องตรงกับรายการใดรายการหนึ่ง และผลลัพธ์สุดท้ายต้องไม่ว่าง (หลังจากยกเว้นรายการที่ตรงกับรูปแบบ `exclude`)

module_name

string module_name()

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

module_version

string module_version()

เวอร์ชันของโมดูล Bazel ที่เชื่อมโยงกับที่เก็บที่แพ็กเกจนี้อยู่ หากแพ็กเกจนี้มาจาก repo ที่กำหนดไว้ใน 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_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 สตริงหรือป้ายกำกับ ต้องระบุ
สตริงป้ายกำกับอินพุตหรือออบเจ็กต์ป้ายกำกับ หากมีการส่งออบเจ็กต์ป้ายกำกับ ระบบจะแสดงผลออบเจ็กต์ดังกล่าวตามที่ส่ง

repo_name

string repo_name()

ชื่อที่แน่นอนของที่เก็บที่มีแพ็กเกจที่กำลังประเมินอยู่ โดยไม่มีเครื่องหมาย @ นำหน้า

repository_name

string repository_name()

ทดลอง API นี้ยังอยู่ในขั้นทดลองและอาจมีการเปลี่ยนแปลงได้ทุกเมื่อ โปรดอย่าใช้ฟีเจอร์นี้ คุณอาจเปิดใช้ในเวอร์ชันทดลองได้โดยการตั้งค่า --+incompatible_enable_deprecated_label_apis
เลิกใช้งานแล้ว เราขอแนะนำให้ใช้ repo_name แทน ซึ่งไม่มีเครื่องหมาย @ ที่ไม่ถูกต้องนำหน้า แต่ทำงานเหมือนกันในกรณีอื่นๆ

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

เลือก

unknown select(x, no_match_error='')

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

พารามิเตอร์

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

แพ็กเกจย่อย

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

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

พารามิเตอร์

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