ไฟล์ BUILD

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

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

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

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

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

พารามิเตอร์

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

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

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

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

หากเป็นไปได้ ให้ใช้ฟังก์ชันนี้เฉพาะในฟังก์ชันการใช้งานของมาโครสัญลักษณ์ตัวสรุปกฎ เราไม่แนะนำให้ใช้ฟังก์ชันนี้ในบริบทอื่นๆ และจะปิดใช้ใน Bazel รุ่นต่อๆ ไป เนื่องจากจะทำให้ไฟล์ 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()

หากเป็นไปได้ ให้ใช้ฟังก์ชันนี้เฉพาะในฟังก์ชันการใช้งานของมาโครสัญลักษณ์ตัวสรุปกฎ เราไม่แนะนำให้ใช้ฟังก์ชันนี้ในบริบทอื่นๆ และจะปิดใช้ใน 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 ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการรูปแบบ Glob ที่จะยกเว้น
exclude_directories int; ค่าเริ่มต้นคือ 1
แฟล็กที่ระบุว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้นคือ unbound
เราอนุญาตให้รูปแบบ Glob ไม่ตรงกับอะไรเลยหรือไม่ หาก `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

พัสดุ

unknown package(**kwargs)

ประกาศข้อมูลเมตาที่มีผลกับทุกกฎในแพ็กเกจ ต้องเรียกใช้ได้ไม่เกิน 1 ครั้งภายในแพ็กเกจ (ไฟล์ BUILD) หากมีการเรียกใช้ ควรเป็นการเรียกใช้ครั้งแรกในไฟล์ BUILD ทันทีหลังจากคำสั่ง load()

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
kwargs required
ดูฟังก์ชัน package() ในสารานุกรมการสร้างเพื่อดูอาร์กิวเมนต์ที่เกี่ยวข้อง

package_default_visibility

List package_default_visibility()

แสดงผลระดับการเข้าถึงเริ่มต้นของแพ็กเกจที่กำลังประเมิน นี่คือค่าของพารามิเตอร์ default_visibility ของ package() ซึ่งขยายให้รวมแพ็กเกจด้วย

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