native.cc_library
โปรดทราบว่าโมดูลแบบเนทีฟจะใช้ได้เฉพาะในระยะการโหลดเท่านั้น (เช่น สําหรับมาโคร ไม่ใช่สําหรับการติดตั้งใช้งานกฎ) แอตทริบิวต์จะไม่สนใจค่า None
และจะปฏิบัติต่อค่าเหล่านี้เสมือนว่าแอตทริบิวต์ไม่ได้ตั้งค่าฟังก์ชันต่อไปนี้พร้อมใช้งานด้วย
สมาชิก
- existing_rule
- existing_rules
- exports_files
- glob
- module_name
- module_version
- package_group
- package_name
- package_relative_label
- repository_name
- subpackages
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()
หากตั้งค่า 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 native.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 native.exports_files(srcs, visibility=None, licenses=None)ระบุรายการไฟล์ของแพ็กเกจนี้ที่จะส่งออกไปยังแพ็กเกจอื่นๆ
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
srcs
|
sequence of strings
ต้องระบุรายการไฟล์ที่จะส่งออก |
visibility
|
sequence; or None ;
default = Noneคุณระบุประกาศระดับการเข้าถึงได้ ไฟล์จะแสดงต่อเป้าหมายที่ระบุ หากไม่ระบุระดับการแชร์ ไฟล์จะแสดงให้ทุกแพ็กเกจเห็น |
licenses
|
sequence of strings; or None ;
ค่าเริ่มต้น = ไม่มีใบอนุญาตที่จะระบุ |
glob
sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)Glob จะแสดงรายการใหม่แบบแก้ไขได้และจัดเรียงได้ของทุกไฟล์ในแพ็กเกจปัจจุบัน ซึ่ง:
- ตรงกับรูปแบบอย่างน้อย 1 รูปแบบใน
include
- ไม่ตรงกับรูปแบบใดเลยใน
exclude
(ค่าเริ่มต้น[]
)
exclude_directories
(ตั้งค่าเป็น 1
) ระบบจะไม่รวมไฟล์ประเภทไดเรกทอรีไว้ในผลลัพธ์ (ค่าเริ่มต้นคือ 1
)
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
include
|
sequence of strings ;
default = []รายการรูปแบบทั่วไปที่จะรวม |
exclude
|
sequence of strings ;
ค่าเริ่มต้น = []รายการรูปแบบ glob ที่จะยกเว้น |
exclude_directories
|
default = 1 Flag ระบุว่าจะยกเว้นไดเรกทอรีหรือไม่ |
allow_empty
|
default = unbound Whether we allow glob patterns to match nothing. หาก `allow_empty` เป็น False รูปแบบการรวมแต่ละรายการต้องตรงกับรายการใดรายการหนึ่ง และผลลัพธ์สุดท้ายต้องไม่ว่างเปล่า (หลังจากยกเว้นการจับคู่รูปแบบ "exclude" แล้ว) |
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
|
sequence of strings ;
default = []การแจกแจงแพ็กเกจทั้งหมดในกลุ่มนี้ |
includes
|
sequence of strings ;
ค่าเริ่มต้น = []กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในกลุ่มนี้ |
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; or Label ;
ต้องระบุสตรีน็กป้ายกำกับอินพุตหรือออบเจ็กต์ป้ายกำกับ หากมีการส่งออบเจ็กต์ Label ระบบจะแสดงผลออบเจ็กต์ดังกล่าวตามที่เป็นอยู่ |
repository_name
string native.repository_name()ชื่อที่เก็บซึ่งเรียกใช้กฎหรือส่วนขยายการสร้าง เช่น ในแพ็กเกจที่เรียกให้สร้างขึ้นมาโดย stanza WORKSPACE
local_repository(name='local', path=...)
จะมีการตั้งค่าเป็น @local
ในแพ็กเกจในที่เก็บข้อมูลหลัก ระบบจะตั้งค่าเป็น @
ฟังก์ชันนี้เทียบเท่ากับตัวแปร REPOSITORY_NAME
ที่เลิกใช้งานแล้ว
แพ็กเกจย่อย
sequence native.subpackages(include, exclude=[], allow_empty=False)แสดงผลรายการใหม่แบบปรับเปลี่ยนได้ของแพ็กเกจย่อยโดยตรงทุกรายการของแพ็กเกจปัจจุบัน โดยไม่คำนึงถึงระดับความลึกของไดเรกทอรีระบบไฟล์ รายการที่แสดงจะจัดเรียงและมีชื่อของแพ็กเกจย่อยที่เกี่ยวข้องกับแพ็กเกจปัจจุบัน เราขอแนะนำให้ใช้เมธอดในโมดูล bazel_skylib.subpackages แทนการเรียกใช้ฟังก์ชันนี้โดยตรง
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
include
|
sequence of strings ;
ต้องระบุรายการรูปแบบ Glob ที่จะรวมไว้ในการสแกนแพ็กเกจย่อย |
exclude
|
sequence of strings ;
default = []รายการรูปแบบ Glob ที่จะยกเว้นจากการสแกนแพ็กเกจย่อย |
allow_empty
|
default = False Whether we fail if the call returns an empty list. โดยค่าเริ่มต้น รายการว่างจะบ่งบอกถึงข้อผิดพลาดที่อาจเกิดขึ้นในไฟล์ BUILD ที่การเรียกใช้ subpackages() นั้นไม่จำเป็น การตั้งค่าเป็น "จริง" จะช่วยให้ฟังก์ชันนี้ดำเนินการสำเร็จในกรณีนั้นได้ |