ไฟล์ BUILD

รายงานปัญหา ตอนกลางคืน · 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

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

เนื่องจากชุดที่อิงตามแฮชใช้เพื่อกำจัดรายการที่ซ้ำกันระหว่างการทำซ้ำ องค์ประกอบทั้งหมดของ depset จึงควรเป็นแฮชได้ อย่างไรก็ตาม ในขณะนี้ค่าตัวแปรนี้ไม่ได้ตรวจสอบอย่างสอดคล้องกันในเครื่องมือสร้างทั้งหมด ใช้ Flag --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; ต้องระบุ
ชื่อของเป้าหมาย

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 sequence ของ strings ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะยกเว้น
exclude_directories int; ค่าเริ่มต้นคือ 1
แฟล็กว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้นคือ unbound
เราอนุญาตให้รูปแบบทั่วไปไม่จับคู่กับรายการใดเลยหรือไม่ หาก "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; ต้องระบุ
ชื่อที่ไม่ซ้ำกันของกฎนี้
packages ลําดับของ สตริง ค่าเริ่มต้นคือ []
การแจกแจงแพ็กเกจทั้งหมดในกลุ่มนี้
includes sequence ของ strings ค่าเริ่มต้นคือ []
กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในแพ็กเกจนี้

package_name

string package_name()

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

package_relative_label

Label package_relative_label(input)

แปลงสตริงอินพุตเป็นออบเจ็กต์ป้ายกำกับในบริบทของแพ็กเกจที่กำลังเริ่มต้นอยู่ในขณะนี้ (ซึ่งก็คือไฟล์ 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 แทน ซึ่งไม่มีเครื่องหมาย @ นําหน้าที่ไม่ถูกต้อง แต่ทํางานเหมือนกัน

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

เลือก

unknown select(x, no_match_error='')

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

พารามิเตอร์

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

แพ็กเกจย่อย

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

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

พารามิเตอร์

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