การดำเนินการ

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4

โมดูลที่มีฟังก์ชันสำหรับสร้างการดำเนินการ เข้าถึงโมดูลนี้โดยใช้ ctx.actions

สมาชิก

args

Args actions.args()

แสดงผลออบเจ็กต์ Args ที่ใช้สร้างบรรทัดคำสั่งที่ประหยัดหน่วยความจำได้

declare_directory

File actions.declare_directory(filename, *, sibling=None)

ประกาศว่ากฎหรือองค์ประกอบสร้างไดเรกทอรีด้วยชื่อที่ระบุในแพ็กเกจปัจจุบัน คุณต้องสร้างการดำเนินการที่สร้างไดเรกทอรี เนื้อหาของไดเรกทอรีจะเข้าถึงจาก Starlark โดยตรงไม่ได้ แต่สามารถขยายในคำสั่งการดำเนินการด้วย Args.add_all() เฉพาะไฟล์และไดเรกทอรีปกติเท่านั้นที่จะอยู่ในเนื้อหาแบบขยายของ declare_directory ได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
filename ต้องระบุ
หากไม่ได้ระบุ "sibling" เส้นทางของไดเรกทอรีใหม่จะสัมพันธ์กับแพ็กเกจปัจจุบัน หรือเป็นชื่อฐานสำหรับไฟล์ ("ระดับเดียวกัน" จะกำหนดไดเรกทอรี)
sibling ไฟล์ หรือ None ค่าเริ่มต้นคือ None
ไฟล์ที่อยู่ในไดเรกทอรีเดียวกับไดเรกทอรีที่ประกาศใหม่ ไฟล์ต้องอยู่ในแพ็กเกจปัจจุบัน

declare_file

File actions.declare_file(filename, *, sibling=None)

ประกาศว่ากฎหรือแง่มุมสร้างไฟล์ที่มีชื่อไฟล์ที่ระบุ หากไม่ได้ระบุ sibling ชื่อไฟล์จะสัมพันธ์กับไดเรกทอรีแพ็กเกจ หรือไฟล์จะอยู่ในไดเรกทอรีเดียวกับ sibling คุณสร้างไฟล์นอกแพ็กเกจปัจจุบันไม่ได้

โปรดทราบว่านอกจากการประกาศไฟล์แล้ว คุณยังต้องสร้างการดำเนินการที่ส่งออกไฟล์แยกต่างหากด้วย การสร้างการดำเนินการดังกล่าวจะต้องส่งออบเจ็กต์ File ที่แสดงผลไปยังฟังก์ชันการสร้างของการดำเนินการ

โปรดทราบว่าไฟล์เอาต์พุตที่ประกาศไว้ล่วงหน้าไม่จําเป็นต้อง (และไม่สามารถ) ประกาศโดยใช้ฟังก์ชันนี้ คุณสามารถรับออบเจ็กต์ File ได้จาก ctx.outputs แทน ดูตัวอย่างการใช้งาน

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
filename ต้องระบุ
หากไม่ได้ระบุ "sibling" เส้นทางของไฟล์ใหม่จะสัมพันธ์กับแพ็กเกจปัจจุบัน มิฉะนั้น ชื่อฐานสำหรับไฟล์ ("ระดับเดียวกัน" จะกำหนดไดเรกทอรี)
sibling File หรือ None ค่าเริ่มต้นคือ None
เป็นไฟล์ที่อยู่ในไดเรกทอรีเดียวกับไฟล์ที่สร้างใหม่ ไฟล์ต้องอยู่ในแพ็กเกจปัจจุบัน

File actions.declare_symlink(filename, *, sibling=None)

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
filename ต้องระบุ
หากไม่ได้ระบุ "sibling" เส้นทางของลิงก์สัญลักษณ์ใหม่ซึ่งสัมพันธ์กับแพ็กเกจปัจจุบัน หรือเป็นชื่อฐานสำหรับไฟล์ ("ระดับเดียวกัน" จะกำหนดไดเรกทอรี)
sibling File หรือ None ค่าเริ่มต้นคือ None
ไฟล์ที่อาศัยอยู่ในไดเรกทอรีเดียวกับ Symlink ที่ประกาศใหม่

do_nothing

None actions.do_nothing(mnemonic, inputs=[])

สร้างการดำเนินการที่ว่างเปล่าซึ่งไม่เรียกใช้คำสั่งหรือสร้างเอาต์พุตใดๆ แต่มีประโยชน์สำหรับการแทรก "การดำเนินการเพิ่มเติม"

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
mnemonic ต้องระบุ
คําอธิบายการดําเนินการแบบ 1 คํา เช่น CppCompile หรือ GoLink
inputs ลําดับของ File หรือ depset ค่าเริ่มต้นคือ []
ลิสต์ไฟล์อินพุตของการดำเนินการ

expand_template

None actions.expand_template(template, output, substitutions={}, is_executable=False, computed_substitutions=unbound)

สร้างการดำเนินการขยายเทมเพลต เมื่อดำเนินการแล้ว ระบบจะสร้างไฟล์ตามเทมเพลต ระบบจะแทนที่บางส่วนของเทมเพลตโดยใช้พจนานุกรม substitutions ตามลำดับที่ระบุการแทนที่ เมื่อใดก็ตามที่คีย์ของพจนานุกรมปรากฏในเทมเพลต (หรือเป็นผลมาจากการแทนที่ก่อนหน้านี้) ระบบจะแทนที่คีย์ด้วยค่าที่เชื่อมโยง คีย์ไม่มีไวยากรณ์พิเศษ ตัวอย่างเช่น คุณสามารถใช้วงเล็บปีกกาเพื่อหลีกเลี่ยงความขัดแย้ง (เช่น {KEY}) ดูตัวอย่างการใช้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
template ต้องระบุ
ไฟล์เทมเพลต ซึ่งเป็นไฟล์ข้อความที่เข้ารหัสแบบ UTF-8
output ต้องระบุ
ซึ่งเป็นไฟล์เอาต์พุตที่เป็นไฟล์ข้อความที่เข้ารหัส UTF-8
substitutions ค่าเริ่มต้นคือ {}
การแทนที่ที่จะทำเมื่อขยายเทมเพลต
is_executable ค่าเริ่มต้นคือ False
ระบุว่าไฟล์เอาต์พุตควรเป็นไฟล์ปฏิบัติการหรือไม่
computed_substitutions TemplateDict ค่าเริ่มต้นคือ unbound
การแทนที่ที่จะทำเมื่อขยายเทมเพลต

โฮมรัน

None actions.run(outputs, inputs=[], unused_inputs_list=None, executable, tools=unbound, arguments=[], mnemonic=None, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=unbound)

สร้างการดำเนินการที่เรียกใช้ไฟล์ปฏิบัติการ ดูตัวอย่างการใช้งาน

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
outputs ลําดับของ Files ต้องระบุ
รายการไฟล์เอาต์พุตของการดำเนินการ
inputs ลําดับของไฟล์หรือ depset ค่าเริ่มต้นคือ []
รายการหรือ depset ของไฟล์อินพุตของการดำเนินการ
unused_inputs_list File หรือ None ค่าเริ่มต้นคือ None
ไฟล์ที่มีรายการอินพุตที่การดำเนินการไม่ได้ใช้

เนื้อหาของไฟล์นี้ (โดยทั่วไปคือเอาต์พุตรายการใดรายการหนึ่งของการดำเนินการ) สอดคล้องกับรายการไฟล์อินพุตที่ไม่ได้ใช้ในระหว่างการดำเนินการทั้งหมด การเปลี่ยนแปลงในไฟล์เหล่านั้นต้องไม่ส่งผลต่อเอาต์พุตของการดำเนินการไม่ว่าในทางใดก็ตาม

executable File หรือ string หรือ FilesToRunProvider ต้องระบุ
เป็นไฟล์ที่เรียกใช้งานได้ซึ่งการดำเนินการจะเรียกใช้
tools sequence หรือ depset ค่าเริ่มต้นคือ unbound
ลิสต์หรือ depset ของเครื่องมือที่จําเป็นสําหรับการดําเนินการ เครื่องมือเป็นอินพุตพร้อมไฟล์เรียกใช้เพิ่มเติมที่พร้อมใช้งานกับการดำเนินการโดยอัตโนมัติ เมื่อมีการระบุรายการ อาจมีคอลเล็กชันที่หลากหลายของอินสแตนซ์ Files, FilesToRunProvider หรือ Depset ของ Files ระบบจะเพิ่มไฟล์ที่ใช้ในรายการโดยตรงและมาจาก ctx.executable โดยอัตโนมัติ เมื่อระบุชุดข้อมูล จะต้องมีเฉพาะไฟล์เท่านั้น ในทั้ง 2 กรณี ระบบจะไม่ตรวจสอบไฟล์ภายใน depset กับ ctx.executable สำหรับไฟล์รันไทม์
arguments sequence; ค่าเริ่มต้นคือ []
อาร์กิวเมนต์บรรทัดคำสั่งของการดำเนินการ ต้องเป็นรายการสตริงหรือออบเจ็กต์ actions.args()
mnemonic สตริง หรือ None ค่าเริ่มต้นคือ None
คำอธิบายการดำเนินการแบบ 1 คำ เช่น CppCompile หรือ GoLink
progress_message string หรือ None ค่าเริ่มต้นคือ None
ข้อความความคืบหน้าที่แสดงต่อผู้ใช้ในระหว่างบิลด์ เช่น "คอมไพล์ foo.cc เพื่อสร้าง foo.o" ข้อความอาจมีรูปแบบ %{label}, %{input} หรือ %{output} ซึ่งระบบจะแทนที่ด้วยสตริงป้ายกำกับ อินพุตแรก หรือเส้นทางเอาต์พุตตามลำดับ แนะนำให้ใช้รูปแบบแทนสตริงแบบคงที่ เนื่องจากรูปแบบมีประสิทธิภาพมากกว่า
use_default_shell_env ค่าเริ่มต้นคือ False
กำหนดว่าการดำเนินการควรใช้สภาพแวดล้อม Shell เริ่มต้นซึ่งประกอบด้วยตัวแปรที่อิงตามระบบปฏิบัติการ 2-3 รายการ รวมทั้งตัวแปรที่ตั้งค่าผ่าน --action_env หรือไม่

หากทั้ง use_default_shell_env และ env ตั้งค่าเป็น True ค่าที่ตั้งไว้ใน env จะเขียนทับสภาพแวดล้อมเชลล์เริ่มต้นหากเปิดใช้ --incompatible_merge_fixed_and_default_shell_env (ค่าเริ่มต้น) หากไม่ได้เปิดใช้ Flag ระบบจะไม่สนใจ env

env dict หรือ None ค่าเริ่มต้นคือ None
กําหนดพจนานุกรมของตัวแปรสภาพแวดล้อม

หากตั้งค่า use_default_shell_env และ env เป็น True ค่าที่ตั้งไว้ใน env จะเขียนทับสภาพแวดล้อมของ Shell เริ่มต้นหากเปิดใช้ --incompatible_merge_fixed_and_default_shell_env (ค่าเริ่มต้น) หากไม่ได้เปิดใช้ Flag ระบบจะไม่สนใจ env

execution_requirements dict หรือ None ค่าเริ่มต้นคือ None
ข้อมูลสำหรับการกำหนดเวลาการดำเนินการ ดูคีย์ที่มีประโยชน์ในแท็ก
input_manifests sequence หรือ None ค่าเริ่มต้นคือ None
(ทดลอง) ตั้งค่าข้อมูลเมตาของไฟล์รันไทม์อินพุต ซึ่งโดยปกติแล้วระบบจะสร้างจาก resolve_command
exec_group สตริง หรือ None ค่าเริ่มต้นคือ None
ทําการบนแพลตฟอร์มการดําเนินการของกลุ่ม exec ที่ระบุ หากไม่มี จะใช้แพลตฟอร์มการเรียกใช้เริ่มต้นของเป้าหมาย
shadowed_action การดำเนินการ; ค่าเริ่มต้นคือ None
ทำให้การดำเนินการทำงานโดยใช้อินพุตและสภาพแวดล้อมของการดำเนินการที่ซ้อนทับซึ่งเพิ่มลงในรายการอินพุตและสภาพแวดล้อมของการดำเนินการ สภาพแวดล้อมการดําเนินการสามารถเขียนทับตัวแปรสภาพแวดล้อมของการดําเนินการที่ซ้อนทับได้ หากไม่มี ให้ใช้เฉพาะอินพุตของการดำเนินการและสภาพแวดล้อมที่ระบุ
resource_set callable หรือ None; ค่าเริ่มต้นคือ None
เป็นฟังก์ชัน Callback ที่แสดงพจนานุกรมชุดทรัพยากร ซึ่งใช้ในการประมาณการใช้ทรัพยากร ณ เวลาดำเนินการหากการดําเนินการนี้ทํางานในเครื่อง

ฟังก์ชันนี้ยอมรับอาร์กิวเมนต์ตำแหน่ง 2 รายการ ได้แก่ สตริงที่แสดงชื่อระบบปฏิบัติการ (เช่น "osx") และจำนวนเต็มซึ่งแสดงจํานวนอินพุตสําหรับการดําเนินการ พจนานุกรมที่แสดงผลอาจมีรายการต่อไปนี้ ซึ่งแต่ละรายการอาจเป็น float หรือ int

  • "cpu": จำนวน CPU ค่าเริ่มต้น 1
  • "memory": เป็น MB โดยค่าเริ่มต้นคือ 250
  • "local_test": จํานวนการทดสอบในเครื่อง เริ่มต้นที่ 1

หากตั้งค่าพารามิเตอร์นี้เป็น None หรือ --experimental_action_resource_set เป็นเท็จ ระบบจะใช้ค่าเริ่มต้น

ฟังก์ชัน Callback ต้องเป็นระดับบนสุด (ไม่อนุญาตให้ใช้ฟังก์ชัน LAMBDA และฟังก์ชันที่ฝัง)

toolchain Label หรือ string หรือ None ค่าเริ่มต้นคือ unbound

ประเภท Toolchain ของไฟล์ปฏิบัติการหรือเครื่องมือที่ใช้ในการดำเนินการนี้ ต้องตั้งค่าพารามิเตอร์ เพื่อให้การดำเนินการนั้นดำเนินการบนแพลตฟอร์มการดำเนินการที่ถูกต้อง

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

โปรดทราบว่ากฎที่สร้างการดำเนินการนี้ต้องกำหนดเครื่องมือนี้ภายในฟังก์ชัน "rule()"

เมื่อตั้งค่าทั้งพารามิเตอร์ `toolchain` และ `exec_group` ระบบจะใช้ `exec_group` ข้อผิดพลาดจะปรากฏขึ้นในกรณีที่ "exec_group" ไม่ได้ระบุค่าเดียวกัน

run_shell

None actions.run_shell(outputs, inputs=[], tools=unbound, arguments=[], mnemonic=None, command, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=unbound)

สร้างการดำเนินการที่เรียกใช้คำสั่ง Shell ดูตัวอย่างการใช้งาน

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
outputs ลําดับของ Files ต้องระบุ
รายการไฟล์เอาต์พุตของการดำเนินการ
inputs ลำดับ ของไฟล์หรือ depset ค่าเริ่มต้นคือ []
รายการหรือการแยกไฟล์อินพุตของการดำเนินการ
tools ลําดับของ File หรือ depset ค่าเริ่มต้นคือ unbound
รายการหรือ depset ของเครื่องมือที่จําเป็นสําหรับการดําเนินการ เครื่องมือเป็นอินพุตพร้อมไฟล์เรียกใช้เพิ่มเติมที่พร้อมใช้งานกับการดำเนินการโดยอัตโนมัติ รายการอาจมีอินสแตนซ์ Files หรือ FilesToRunProvider
arguments sequence; ค่าเริ่มต้นคือ []
อักขระอาร์กิวเมนต์บรรทัดคำสั่งของการดำเนินการ ต้องเป็นรายการสตริงหรือออบเจ็กต์ actions.args()

Bazel จะส่งองค์ประกอบในแอตทริบิวต์นี้เป็นอาร์กิวเมนต์ไปยังคําสั่ง คําสั่งจะเข้าถึงอาร์กิวเมนต์เหล่านี้ได้โดยใช้การแทนที่ตัวแปรเชลล์ เช่น $1, $2 ฯลฯ โปรดทราบว่าเนื่องจากออบเจ็กต์ Args จะถูกผสานก่อนการจัดทำดัชนี หากมีออบเจ็กต์ Args ที่มีขนาดที่ไม่รู้จัก สตริงต่อๆ ไปทั้งหมดจะอยู่ในช่วงที่ไม่คาดคิด คุณอาจต้องใช้ $@ (เพื่อดึงข้อมูลอาร์กิวเมนต์ทั้งหมด) ร่วมกับออบเจ็กต์ Args ที่มีขนาดไม่แน่นอน

ในกรณีที่ command เป็นรายการสตริง ระบบอาจไม่ใช้พารามิเตอร์นี้

mnemonic สตริง หรือ None ค่าเริ่มต้นคือ None
คำอธิบายการดำเนินการแบบ 1 คำ เช่น CppCompile หรือ GoLink
command string หรือลำดับของสตริง ต้องระบุ
คำสั่ง Shell เพื่อเรียกใช้ ซึ่งอาจเป็นสตริง (แนะนำ) หรือลำดับสตริง (เลิกใช้งานแล้ว)

หาก command เป็นสตริง ระบบจะดำเนินการกับ command ราวกับว่าใช้ sh -c <command> "" <arguments> กล่าวคือ ระบบจะทําให้องค์ประกอบใน arguments พร้อมใช้งานสําหรับคําสั่งเป็น $1, $2 (หรือ %1, %2 หากใช้แบทช์ของ Windows) เป็นต้น หาก arguments มีออบเจ็กต์ actions.args() ระบบจะใส่เนื้อหาของออบเจ็กต์ต่อท้ายบรรทัดคำสั่งทีละรายการ เพื่อให้ $i อ้างอิงสตริงแต่ละรายการภายในออบเจ็กต์ Args ได้ โปรดทราบว่าหากมีการส่งออบเจ็กต์ Args ขนาดที่ไม่รู้จักเป็นส่วนหนึ่งของ arguments สตริงจะอยู่ในรูปแบบที่ไม่รู้จัก ในกรณีนี้การแทนที่เชลล์ $@ (ดึงข้อมูลอาร์กิวเมนต์ทั้งหมด) อาจมีประโยชน์

(เลิกใช้งานแล้ว) หาก command เป็นสตริงตามลําดับ รายการแรกจะเป็นไฟล์ที่เรียกใช้ได้ และรายการที่เหลือจะเป็นอาร์กิวเมนต์ หากใช้แบบฟอร์มนี้ ต้องระบุพารามิเตอร์ arguments โปรดทราบว่าเราจะเลิกใช้งานแบบฟอร์มนี้และจะนำออกในเร็วๆ นี้ มีการปิดใช้ด้วย "--incompatible_run_shell_command_string" ใช้แฟล็กนี้เพื่อตรวจสอบว่าโค้ดใช้งานร่วมกันได้

Bazel ใช้เชลล์เดียวกันเพื่อเรียกใช้คำสั่งเช่นเดียวกับที่ใช้กับ genrules

progress_message สตริง หรือ None ค่าเริ่มต้นคือ None
ข้อความความคืบหน้าที่จะแสดงต่อผู้ใช้ระหว่างการสร้าง เช่น "กำลังคอมไพล์ foo.cc เพื่อสร้าง foo.o" ข้อความอาจมีรูปแบบ %{label}, %{input} หรือ %{output} ซึ่งแทนที่ด้วยสตริงป้ายกำกับ อินพุตแรก หรือเส้นทางของเอาต์พุตตามลำดับ แนะนำให้ใช้รูปแบบแทนสตริงแบบคงที่ เนื่องจากรูปแบบมีประสิทธิภาพมากกว่า
use_default_shell_env ค่าเริ่มต้นคือ False
การดำเนินการควรใช้สภาพแวดล้อมเชลล์เริ่มต้นหรือไม่ ซึ่งประกอบด้วยตัวแปรที่ขึ้นอยู่กับระบบปฏิบัติการ 2-3 รายการ รวมถึงตัวแปรที่ตั้งค่าผ่าน --action_env

หากตั้งค่า use_default_shell_env และ env เป็น True ค่าที่ตั้งไว้ใน env จะเขียนทับสภาพแวดล้อมของ Shell เริ่มต้นหากเปิดใช้ --incompatible_merge_fixed_and_default_shell_env (ค่าเริ่มต้น) หากไม่ได้เปิดใช้ Flag ระบบจะไม่สนใจ env

env dict หรือ None ค่าเริ่มต้นคือ None
กําหนดพจนานุกรมของตัวแปรสภาพแวดล้อม

หากทั้ง use_default_shell_env และ env ตั้งค่าเป็น True ค่าที่ตั้งไว้ใน env จะเขียนทับสภาพแวดล้อมเชลล์เริ่มต้นหากเปิดใช้ --incompatible_merge_fixed_and_default_shell_env (ค่าเริ่มต้น) หากไม่ได้เปิดใช้ Flag ระบบจะไม่สนใจ env

execution_requirements dict หรือ None ค่าเริ่มต้นคือ None
ข้อมูลสำหรับการกำหนดเวลาการดำเนินการ ดูแท็กสำหรับคีย์ที่มีประโยชน์
input_manifests sequence หรือ None ค่าเริ่มต้นคือ None
(ทดลอง) ตั้งค่าข้อมูลเมตาของไฟล์รันไทม์อินพุต ซึ่งโดยปกติแล้วระบบจะสร้างจาก resolve_command
exec_group สตริง หรือ None ค่าเริ่มต้นคือ None
ทําการบนแพลตฟอร์มการดําเนินการของกลุ่ม exec ที่ระบุ หากไม่มี จะใช้แพลตฟอร์มการเรียกใช้เริ่มต้นของเป้าหมาย
shadowed_action การดำเนินการ; ค่าเริ่มต้นคือ None
ทำให้การดำเนินการทำงานโดยใช้อินพุตที่ค้นพบของการดำเนินการที่ซ้อนทับซึ่งระบุไว้ซึ่งเพิ่มลงในรายการอินพุตของการดำเนินการ หากไม่มี ให้ใช้เฉพาะอินพุตของการดำเนินการ
resource_set callable หรือ None ค่าเริ่มต้นคือ None
ฟังก์ชัน Callback สำหรับการประมาณการใช้ทรัพยากรหากเรียกใช้ในพื้นที่ โปรดดูctx.actions.run()
toolchain ป้ายกำกับ หรือสตริง หรือ None ค่าเริ่มต้นคือ unbound

ประเภท Toolchain ของไฟล์ปฏิบัติการหรือเครื่องมือที่ใช้ในการดำเนินการนี้ ต้องตั้งค่าพารามิเตอร์ เพื่อให้การดำเนินการนั้นดำเนินการบนแพลตฟอร์มการดำเนินการที่ถูกต้อง

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

โปรดทราบว่ากฎที่สร้างการดำเนินการนี้ต้องกำหนดเครื่องมือนี้ภายในฟังก์ชัน "rule()"

เมื่อตั้งค่าพารามิเตอร์ "toolchain" และ "exec_group" ทั้งคู่ ระบบจะใช้ "exec_group" ระบบจะแสดงข้อผิดพลาดในกรณีที่ `exec_group` ไม่ได้ระบุเครื่องมือชุดเดียวกัน

None actions.symlink(output, target_file=None, target_path=None, is_executable=False, progress_message=None)

สร้างการดำเนินการที่จะเขียนลิงก์สัญลักษณ์ (Symlink) ในระบบไฟล์

ฟังก์ชันนี้ต้องเรียกโดยระบุ target_file หรือ target_path เพียงอย่างใดอย่างหนึ่ง

เมื่อคุณใช้ target_file ให้ประกาศ output ด้วย declare_file() หรือ declare_directory() และจับคู่ประเภทของ target_file ซึ่งจะทำให้ลิงก์สัญลักษณ์ชี้ไปยัง target_file Bazel จะลบล้างเอาต์พุตของการดำเนินการนี้ทุกครั้งที่มีการเปลี่ยนแปลงเป้าหมายของลิงก์สัญลักษณ์หรือเนื้อหาของลิงก์สัญลักษณ์

หรือเมื่อใช้ target_path ให้ประกาศ output ด้วย declare_symlink()) ในกรณีนี้ สัญลักษณ์ลิงก์จะชี้ไปยัง target_path Bazel จะไม่แก้ไขลิงก์สัญลักษณ์ และเอาต์พุตของการดำเนินการนี้จะใช้งานไม่ได้ก็ต่อเมื่อเนื้อหาข้อความของลิงก์สัญลักษณ์ (นั่นคือค่าของ readlink()) เปลี่ยนแปลงเท่านั้น โดยเฉพาะอย่างยิ่ง สามารถใช้เพื่อสร้างลิงก์สัญลักษณ์ที่อันตรายได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
output ต้องระบุ
เอาต์พุตของการดำเนินการนี้
target_file File หรือ None ค่าเริ่มต้นคือ None
คือไฟล์ที่ลิงก์สัญลักษณ์เอาต์พุตจะชี้ไป
target_path สตริง หรือ None ค่าเริ่มต้นคือ None
เส้นทางที่แน่นอนซึ่งลิงก์สัญลักษณ์เอาต์พุตจะชี้ไป โดยไม่มีการทำให้เป็นมาตรฐานหรือการประมวลผลอื่นๆ
is_executable ค่าเริ่มต้นคือ False
ใช้กับ target_file ได้เท่านั้น จะใช้กับ target_path ไม่ได้ หากเป็น "จริง" เมื่อดำเนินการ ระบบจะตรวจสอบเส้นทางของ target_file เพื่อยืนยันว่าสามารถเรียกใช้ได้ และจะรายงานข้อผิดพลาดหากเรียกใช้ไม่ได้ การตั้งค่า is_executable เป็น "เท็จ" ไม่ได้หมายความว่าเป้าหมายเรียกใช้ไม่ได้ เพียงแต่ว่าไม่มีการยืนยันจนเสร็จสมบูรณ์

ฟีเจอร์นี้ใช้กับ target_path ไม่ได้เนื่องจากอาจไม่มีลิงก์สัญลักษณ์ที่รอดำเนินการอยู่ ณ เวลาที่สร้าง

progress_message สตริง หรือ None ค่าเริ่มต้นคือ None
ข้อความความคืบหน้าที่จะแสดงต่อผู้ใช้ระหว่างการสร้าง

template_dict

TemplateDict actions.template_dict()

แสดงผลออบเจ็กต์ TemplateDict สำหรับการขยายเทมเพลตที่ประหยัดหน่วยความจำ

เขียน

None actions.write(output, content, is_executable=False)

สร้างการเขียนไฟล์ เมื่อดำเนินการแล้ว ระบบจะเขียนเนื้อหาที่ระบุลงในไฟล์ ซึ่งใช้ในการสร้างไฟล์โดยใช้ข้อมูลที่มีอยู่ในขั้นตอนการวิเคราะห์ หากไฟล์มีขนาดใหญ่และมีเนื้อหาแบบคงที่จำนวนมาก ให้ลองใช้ expand_template

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
output ต้องระบุ
ไฟล์เอาต์พุต
content string หรือ Args ต้องระบุ
เนื้อหาของไฟล์ อาจเป็นสตริงหรือออบเจ็กต์ actions.args()
is_executable ค่าเริ่มต้นคือ False
กำหนดว่าไฟล์เอาต์พุตควรเป็นไฟล์ที่เรียกใช้ได้หรือไม่