native.cc_library
โปรดทราบว่าโมดูลเนทีฟใช้ได้เฉพาะในระยะการโหลดเท่านั้น (นั่นคือ สำหรับมาโคร ไม่ใช่สำหรับการใช้งานกฎ) แอตทริบิวต์จะไม่สนใจค่า None
และดำเนินการกับค่าเหล่านี้เสมือนว่าไม่ได้ตั้งค่าแอตทริบิวต์ฟังก์ชันต่อไปนี้ยังใช้ได้ด้วย
สมาชิก
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repository_name
- แพ็กเกจย่อย
existing_rule
unknown native.existing_rule(name)แสดงผลออบเจ็กต์ที่เหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้ซึ่งอธิบายแอตทริบิวต์ของกฎที่สร้างอินสแตนซ์ในแพ็กเกจของเทรดนี้ หรือแสดงผล
None
หากไม่มีอินสแตนซ์กฎสำหรับชื่อนั้นในที่นี้ ออบเจ็กต์ที่มีลักษณะเหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้หมายถึงออบเจ็กต์ที่เปลี่ยนแปลงไม่ได้อย่างมาก x
ที่รองรับการทำซ้ำแบบเหมือนคำสั่ง, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
และ x.values()
หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view
แล้ว ระบบจะแสดงผลคำสั่งที่เปลี่ยนแปลงได้รายการใหม่ซึ่งมีเนื้อหาเดียวกันแทน
ผลลัพธ์จะมีรายการสำหรับแต่ละแอตทริบิวต์ ยกเว้นแอตทริบิวต์ส่วนตัว (ชื่อที่ไม่ได้ขึ้นต้นด้วยตัวอักษร) และแอตทริบิวต์เดิมไม่กี่ประเภทที่ไม่สามารถนำเสนอได้ นอกจากนี้ คำสั่งยังมีรายการสำหรับ name
และ kind
ของอินสแตนซ์กฎ (เช่น 'cc_binary'
)
ค่าของผลลัพธ์แสดงค่าแอตทริบิวต์ดังนี้
- แอตทริบิวต์ของประเภท str, int และบูลีนจะแสดงตามที่เป็นอยู่
- ระบบจะแปลงป้ายกำกับเป็นสตริงในรูปแบบ
':foo'
สำหรับเป้าหมายในแพ็กเกจเดียวกัน หรือ'//pkg:name'
สำหรับเป้าหมายในแพ็กเกจอื่น - รายการจะแสดงเป็น "Tuple" และระบบจะแปลงเป็น " Dicts" ในรูปแบบใหม่ องค์ประกอบต่างๆ จะได้รับการแปลงซ้ำในวิธีเดียวกัน
- ค่า
select
จะแสดงผลพร้อมเนื้อหาที่เปลี่ยนรูปแบบตามที่อธิบายไว้ข้างต้น - แอตทริบิวต์ที่ไม่ได้ระบุค่าระหว่างการเริ่มต้นกฎและที่มีการคํานวณค่าเริ่มต้น ระบบจะยกเว้นจากผลลัพธ์ (ค่าเริ่มต้นที่คํานวณแล้วจะคํานวณไม่ได้จนกว่าจะเข้าสู่ช่วงการวิเคราะห์)
หากเป็นไปได้ ให้หลีกเลี่ยงการใช้ฟังก์ชันนี้ ทำให้ไฟล์ BUILD ไม่เป็นระเบียบและขึ้นอยู่กับลำดับ โปรดระวังว่า Conversion นี้แตกต่างจาก Conversion อีก 2 รายการของกฎแบบมีแอตทริบิวต์จากรูปแบบภายในเป็น Starlark อยู่แบบนั้น รายการหนึ่งใช้โดยค่าเริ่มต้นที่คำนวณไว้ ส่วนอีกรายการใช้โดย ctx.attr.foo
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
name
|
ต้องระบุ ชื่อของเป้าหมาย |
existing_rules
unknown native.existing_rules()แสดงผลออบเจ็กต์เหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้ซึ่งอธิบายกฎจนถึงปัจจุบันในแพ็กเกจของเทรดนี้ แต่ละรายการของออบเจ็กต์ที่มีลักษณะเหมือนคำสั่งจะแมปชื่อของอินสแตนซ์กฎกับผลลัพธ์ที่
existing_rule(name)
จะแสดงในที่นี้ ออบเจ็กต์ที่มีลักษณะเหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้หมายถึงออบเจ็กต์ที่เปลี่ยนแปลงไม่ได้อย่างมาก x
ที่รองรับการทำซ้ำแบบเหมือนคำสั่ง, len(x)
, name in x
, x[name]
, x.get(name)
, x.items()
, x.keys()
และ x.values()
หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view
แล้ว ระบบจะแสดงผลคำสั่งที่เปลี่ยนแปลงได้รายการใหม่ซึ่งมีเนื้อหาเดียวกันแทน
หมายเหตุ: หากเป็นไปได้ ให้หลีกเลี่ยงการใช้ฟังก์ชันนี้ ทำให้ไฟล์ BUILD ไม่เป็นระเบียบและขึ้นอยู่กับลำดับ นอกจากนี้ หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view
ฟังก์ชันนี้อาจมีค่าใช้จ่ายสูง โดยเฉพาะหากเรียกใช้ภายในลูป
exports_files
None
native.exports_files(srcs, visibility=None, licenses=None)
ระบุรายการไฟล์ที่เป็นของแพ็กเกจนี้ซึ่งส่งออกไปยังแพ็กเกจอื่นๆ
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
srcs
|
sequence ของ strings; required รายการไฟล์ที่จะส่งออก |
visibility
|
ลำดับ หรือ None ค่าเริ่มต้นคือ None สามารถระบุการประกาศระดับการเข้าถึงได้ ไฟล์จะปรากฏแก่เป้าหมายที่ระบุ หากไม่ได้ระบุระดับการเข้าถึง ไฟล์จะแสดงในทุกแพ็กเกจ |
licenses
|
ลำดับของสตริง หรือ None ค่าเริ่มต้นคือ None ใบอนุญาตที่ต้องระบุ |
Glob
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)Glob จะแสดงผลรายการไฟล์ที่เปลี่ยนแปลงและจัดเรียงได้ใหม่ของไฟล์ในแพ็กเกจปัจจุบันที่:
- ตรงกับรูปแบบอย่างน้อย 1 รายการใน
include
- ไม่ตรงกับรูปแบบใดๆ ใน
exclude
(ค่าเริ่มต้น[]
)
exclude_directories
(ตั้งค่าเป็น 1
) ไฟล์ประเภทไดเรกทอรีจะไม่แสดงในผลลัพธ์ (ค่าเริ่มต้น 1
)
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
include
|
ลำดับของสตริง
ค่าเริ่มต้นคือ [] รายการรูปแบบ glob ที่จะรวม |
exclude
|
ลำดับของสตริง
ค่าเริ่มต้นคือ [] รายการรูปแบบ glob ที่จะยกเว้น |
exclude_directories
|
ค่าเริ่มต้นคือ 1 การแจ้งว่าจะยกเว้นไดเรกทอรีหรือไม่ |
allow_empty
|
ค่าเริ่มต้นคือ unbound เราอนุญาตให้รูปแบบ glob จับคู่ไม่ได้เลยหรือไม่ หาก "allow_เว้นว่าง" เป็น "เท็จ" รูปแบบการรวมแต่ละรายการจะต้องตรงกับรายการ และผลลัพธ์สุดท้ายต้องไม่ว่างเปล่า (หลังจากยกเว้นการจับคู่ของรูปแบบ "ยกเว้น" แล้ว) |
module_name
string native.module_name()ชื่อของโมดูล Bazel ที่เชื่อมโยงกับที่เก็บของแพ็กเกจนี้ หากแพ็กเกจนี้มาจากที่เก็บที่กำหนดไว้ใน WORKSPACE แทนที่จะเป็น MODULE.bazel แพ็กเกจนี้จะว่างเปล่า สำหรับที่เก็บซึ่งส่วนขยายโมดูลสร้างขึ้น นี่คือชื่อของโมดูลที่โฮสต์ส่วนขยาย ซึ่งเหมือนกับช่อง
module.name
ที่เห็นใน module_ctx.modules
อาจส่งคืน None
module_version
string native.module_version()เวอร์ชันของโมดูล Bazel ที่เชื่อมโยงกับที่เก็บของแพ็กเกจนี้ หากแพ็กเกจนี้มาจากที่เก็บที่กำหนดไว้ใน WORKSPACE แทนที่จะเป็น MODULE.bazel แพ็กเกจนี้จะว่างเปล่า สำหรับที่เก็บซึ่งส่วนขยายโมดูลสร้างขึ้น นี่คือเวอร์ชันของโมดูลที่โฮสต์ส่วนขยาย ซึ่งเหมือนกับช่อง
module.version
ที่เห็นใน module_ctx.modules
อาจส่งคืน None
package_group
None
native.package_group(name, packages=[], includes=[])
ฟังก์ชันนี้จะกำหนดชุดของแพ็กเกจและกำหนดป้ายกำกับให้กับกลุ่ม สามารถอ้างอิงป้ายกำกับได้ในแอตทริบิวต์ visibility
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
name
|
ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้ |
packages
|
ลำดับของสตริง
ค่าเริ่มต้นคือ [] การแจกแจงแพ็กเกจทั้งหมดในกลุ่มนี้ |
includes
|
ลำดับของสตริง
ค่าเริ่มต้นคือ [] กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในรายการนี้ |
package_name
string native.package_name()ชื่อแพ็กเกจที่ประเมิน เช่น ในไฟล์ BUILD
some/package/BUILD
ค่าจะเป็น some/package
หากไฟล์ BUILD เรียกฟังก์ชันที่กำหนดไว้ในไฟล์ .bzl แล้ว package_name()
จะตรงกับแพ็กเกจไฟล์ BUILD ของผู้โทร ฟังก์ชันนี้เทียบเท่ากับตัวแปร PACKAGE_NAME
ที่เลิกใช้งานแล้ว
package_relative_label
Label native.package_relative_label(input)แปลงสตริงอินพุตเป็นออบเจ็กต์ Label ในบริบทของแพ็กเกจที่เริ่มต้นอยู่ในขณะนี้ (ซึ่งก็คือไฟล์
BUILD
ที่มาโครปัจจุบันกำลังดำเนินการอยู่) หากอินพุตเป็น Label
อยู่แล้ว จะส่งกลับโดยไม่เปลี่ยนแปลงฟังก์ชันนี้อาจถูกเรียกได้ในขณะที่ประเมินไฟล์ BUILD และมาโครที่ไฟล์ดังกล่าวเรียกโดยตรงหรือโดยอ้อมเท่านั้น ฟังก์ชันนี้อาจไม่ได้รับการเรียกในฟังก์ชันการใช้งานกฎ (เช่น)
ผลลัพธ์ของฟังก์ชันนี้เป็นค่า Label
เดียวกันกับที่สร้างขึ้นโดยการส่งสตริงที่ระบุไปยังแอตทริบิวต์ที่เป็นค่าป้ายกำกับของเป้าหมายที่ประกาศในไฟล์ BUILD
หมายเหตุการใช้งาน: ความแตกต่างระหว่างฟังก์ชันนี้กับ Label() คือ Label()
ใช้บริบทของแพ็กเกจของไฟล์ .bzl
ที่เรียกใช้ฟังก์ชันนี้ ไม่ใช่แพ็กเกจของไฟล์ BUILD
ใช้ Label()
เมื่อคุณต้องการอ้างอิงเป้าหมายแบบคงที่ซึ่งมีการฮาร์ดโค้ดลงในมาโคร เช่น คอมไพเลอร์ ใช้ package_relative_label()
เมื่อคุณต้องการทำให้สตริงป้ายกำกับที่ไฟล์ BUILD ระบุให้เป็นมาตรฐานสำหรับออบเจ็กต์ Label
(ไม่มีวิธีแปลงสตริงเป็น Label
ในบริบทของแพ็กเกจที่ไม่ใช่ไฟล์ BUILD หรือไฟล์ .bzl ในการเรียกใช้ ด้วยเหตุนี้ มาโครภายนอกควรจะส่งออบเจ็กต์ป้ายกำกับไปยังมาโครภายในแทนสตริงป้ายกำกับเสมอ)
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
input
|
string หรือป้ายกำกับ
ต้องระบุ สตริงป้ายกำกับอินพุตหรือออบเจ็กต์ป้ายกำกับ ถ้าผ่านออบเจ็กต์ป้ายกำกับ ออบเจ็กต์นั้นจะแสดงผลตามที่เป็น |
repository_name
string native.repository_name()ชื่อของที่เก็บที่ใช้เรียกกฎหรือส่วนขยายของบิลด์ ตัวอย่างเช่น ในแพ็กเกจที่เรียกใช้โดยข้อความ WORKSPACE
local_repository(name='local', path=...)
ระบบจะตั้งค่าเป็น @local
ในแพ็กเกจในที่เก็บหลัก แพ็กเกจดังกล่าวจะตั้งค่าเป็น @
ฟังก์ชันนี้เทียบเท่ากับตัวแปร REPOSITORY_NAME
ที่เลิกใช้งานแล้ว
แพ็กเกจย่อย
sequence native.subpackages(include, exclude=[], allow_empty=False)แสดงรายการแบบเปลี่ยนแปลงได้ที่เปลี่ยนแปลงใหม่ของแพ็กเกจย่อยโดยตรงทุกๆ แพ็กเกจของแพ็กเกจปัจจุบัน โดยไม่คำนึงถึงความลึกของไดเรกทอรีของระบบไฟล์ ระบบจะจัดเรียงรายการที่แสดงผลและมีชื่อของแพ็กเกจย่อยที่สัมพันธ์กับแพ็กเกจปัจจุบัน ขอแนะนำให้ใช้เมธอดในโมดูล bazel_skylib.subpackages แทนการเรียกฟังก์ชันนี้โดยตรง
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
include
|
ลำดับของสตริง
ต้องระบุ รายการรูปแบบ glob ที่จะรวมไว้ในการสแกนแพ็กเกจย่อย |
exclude
|
ลำดับของสตริง ค่าเริ่มต้นคือ [] รายการรูปแบบ glob ที่จะยกเว้นจากการสแกนแพ็กเกจย่อย |
allow_empty
|
ค่าเริ่มต้นคือ False เราจะล้มเหลวหรือไม่หากการเรียกแสดงรายการที่ว่างเปล่า โดยค่าเริ่มต้น รายการที่ว่างเปล่าจะแสดงข้อผิดพลาดที่อาจเกิดขึ้นในไฟล์ BUILD ซึ่งการเรียกไปยัง subpackages() เยอะเกินไป ตั้งค่าเป็น "จริง" จะช่วยให้ฟังก์ชันนี้ประสบความสําเร็จในกรณีดังกล่าว |