ไฟล์ BUILD

รายงานปัญหา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

สมาชิก

depset

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

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

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

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

นอกจากนี้ ขณะนี้องค์ประกอบต้องเป็นแบบคงที่ แต่เราจะผ่อนปรนข้อจำกัดนี้ในอนาคต

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
direct sequence หรือ None ค่าเริ่มต้นคือ None
ซึ่งเป็นรายการองค์ประกอบ direct ของ depset
order ค่าเริ่มต้นคือ "default"
กลยุทธ์การเรียกดูชุดข้อมูลใหม่ ดูค่าที่เป็นไปได้ได้ที่นี่
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()

หากตั้งค่า Flag --noincompatible_existing_rules_immutable_view ระบบจะแสดงผล Dict แบบปรับเปลี่ยนใหม่ที่มีเนื้อหาเดียวกันแทน

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

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

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

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

พารามิเตอร์

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

existing_rules

unknown existing_rules()

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

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

หากตั้งค่า Flag --noincompatible_existing_rules_immutable_view ระบบจะแสดงผล Dict แบบปรับเปลี่ยนใหม่ที่มีเนื้อหาเดียวกันแทน

หมายเหตุ: หลีกเลี่ยงการใช้ฟังก์ชันนี้หากเป็นไปได้ ซึ่งทำให้ไฟล์ 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 sequence ของ strings ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะรวม
exclude sequence ของ strings ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะยกเว้น
exclude_directories ค่าเริ่มต้นคือ 1
Flag ระบุว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้นคือ unbound
เราอนุญาตให้รูปแบบทั่วไปไม่จับคู่กับรายการใดเลยหรือไม่ หาก `allow_empty` เป็น False รูปแบบการรวมแต่ละรายการต้องตรงกับรายการใดรายการหนึ่ง และผลลัพธ์สุดท้ายต้องไม่ว่างเปล่า (หลังจากยกเว้นการจับคู่รูปแบบ "exclude" แล้ว)

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 required
ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้
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 สตริง หรือ ป้ายกำกับ ต้องระบุ
สตริงป้ายกำกับหรือออบเจ็กต์ป้ายกำกับที่ป้อน หากมีการส่งออบเจ็กต์ Label ระบบจะแสดงผลออบเจ็กต์ดังกล่าวตามที่เป็นอยู่

repo_name

string repo_name()

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

repository_name

string repository_name()

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

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

เลือก

unknown select(x, no_match_error='')

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x required
Dict ที่แมปเงื่อนไขการกําหนดค่ากับค่า คีย์แต่ละรายการคือป้ายกํากับหรือสตริงป้ายกํากับที่ระบุอินสแตนซ์ 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() นั้นไม่จำเป็น การตั้งค่าเป็น "จริง" จะช่วยให้ฟังก์ชันนี้ทำงานได้สําเร็จในกรณีดังกล่าว