ไฟล์ BUILD

รายงานปัญหา รุ่น Nightly · 7.4

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

สมาชิก

Depset

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

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

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

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

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
direct sequence หรือ None ค่าเริ่มต้นคือ None
ซึ่งเป็นรายการองค์ประกอบ direct ของ depset
order string; ค่าเริ่มต้นคือ "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()

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

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

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

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

พารามิเตอร์

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

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()

หากเป็นไปได้ ให้ใช้ฟังก์ชันนี้เฉพาะในฟังก์ชันการใช้งานของมาโครสัญลักษณ์ตัวสิ้นสุดกฎ ไม่แนะนําให้ใช้ฟังก์ชันนี้ในบริบทอื่นๆ และจะปิดใช้ในรุ่น Bazel ในอนาคต เนื่องจากจะทำให้ไฟล์ BUILD ทำงานผิดพลาดได้ง่ายและขึ้นอยู่กับลําดับ

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 int; ค่าเริ่มต้นคือ 1
เป็น Flag ที่จะยกเว้นไดเรกทอรีหรือไม่
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 string; required
ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้
packages sequence ของ string ค่าเริ่มต้นคือ []
การแจงนับแพ็กเกจทั้งหมดในกลุ่มนี้
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()

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

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() คือฟังก์ชันตัวช่วยที่ทำให้แอตทริบิวต์กฎ configurable ได้ ดูรายละเอียดได้ที่สร้างสารานุกรม

พารามิเตอร์

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

แพ็กเกจย่อย

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

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

พารามิเตอร์

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