ไฟล์ 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 คือรายการชุดข้อมูลที่มีองค์ประกอบกลายเป็นองค์ประกอบโดยอ้อมของชุดข้อมูลที่สร้างขึ้น ลำดับที่ระบบจะแสดงองค์ประกอบเมื่อแปลงชุดข้อมูล Dependency เป็นลิสต์จะระบุโดยพารามิเตอร์ order ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของ 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)

แสดงผลออบเจ็กต์ที่คล้ายกับพจนานุกรมแบบคงที่ซึ่งอธิบายแอตทริบิวต์ของกฎที่สร้างอินสแตนซ์ในแพ็กเกจของเธรดนี้ หรือ 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 เปราะบางและขึ้นอยู่กับลำดับ นอกจากนี้ หากตั้งค่า Flag --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 ลําดับสตริง ค่าเริ่มต้นคือ []
โดยจะเป็นรายการรูปแบบทั่วไปที่จะยกเว้น
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 ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้
packages ลําดับของ สตริง ค่าเริ่มต้นคือ []
การแจกแจงแพ็กเกจทั้งหมดในกลุ่มนี้
includes ลําดับของ string ค่าเริ่มต้นคือ []
กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในกลุ่มนี้

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

repository_name

string repository_name()

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

เลือก

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 ลําดับสตริง ค่าเริ่มต้นคือ []
นี่คือรายการรูปแบบทั่วไปที่จะยกเว้นจากการสแกนแพ็กเกจย่อย
allow_empty ค่าเริ่มต้นคือ False
หากการเรียกใช้แสดงผลลัพธ์เป็นรายการว่าง เราจะดำเนินการไม่สำเร็จหรือไม่ โดยค่าเริ่มต้น รายการว่างจะบ่งบอกถึงข้อผิดพลาดที่อาจเกิดขึ้นในไฟล์ BUILD ที่การเรียกใช้ subpackages() นั้นไม่จำเป็น การตั้งค่าเป็น "จริง" จะช่วยให้ฟังก์ชันนี้ทำงานได้สําเร็จในกรณีดังกล่าว