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

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

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

สมาชิก

args

Args actions.args()

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

declare_directory

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
filename ต้องระบุ
หากไม่ได้ระบุ "sibling" เส้นทางของไดเรกทอรีใหม่จะสัมพันธ์กับแพ็กเกจปัจจุบัน หรือจะเป็นชื่อฐานของไฟล์ก็ได้ ('sibling' จะกำหนดไดเรกทอรี)
sibling File หรือ 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' จะกำหนดไดเรกทอรี)
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 ลำดับ ของไฟล์ ต้องระบุ
รายการไฟล์เอาต์พุตของการดำเนินการ
inputs ลําดับของไฟล์หรือ depset ค่าเริ่มต้นคือ []
รายการหรือ depset ของไฟล์อินพุตของการดำเนินการ
unused_inputs_list File หรือ None ค่าเริ่มต้นคือ None
ไฟล์ที่มีรายการอินพุตที่การดำเนินการไม่ได้ใช้

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

executable File หรือ string หรือ FilesToRunProvider ต้องระบุ
เป็นไฟล์ที่เรียกใช้งานได้ซึ่งการดำเนินการจะเรียกใช้
tools sequence หรือ depset ค่าเริ่มต้นคือ unbound
แสดงรายการหรือลดการตั้งค่าเครื่องมือที่การดำเนินการต้องใช้ เครื่องมือเป็นอินพุตพร้อมไฟล์เรียกใช้เพิ่มเติมที่พร้อมใช้งานกับการดำเนินการโดยอัตโนมัติ เมื่อระบุรายการ รายการดังกล่าวอาจเป็นคอลเล็กชันไฟล์ที่หลากหลาย อินสแตนซ์ FilesToRunProvider หรือชุด Dep ของไฟล์ ระบบจะเพิ่มไฟล์รันไทม์ของไฟล์ที่อยู่ในรายการโดยตรงและมาจาก 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
การดำเนินการควรใช้สภาพแวดล้อมเชลล์เริ่มต้นหรือไม่ ซึ่งประกอบด้วยตัวแปรที่ขึ้นอยู่กับระบบปฏิบัติการ 2-3 รายการ รวมถึงตัวแปรที่ตั้งค่าผ่าน --action_env

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

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

หากทั้ง use_default_shell_env และ env ตั้งค่าเป็น True ค่าที่ตั้งไว้ใน env จะเขียนทับสภาพแวดล้อมเชลล์เริ่มต้นหากเปิดใช้ --incompatible_merge_fixed_and_default_shell_env (ค่าเริ่มต้น) หากไม่ได้เปิดใช้ธง ระบบจะไม่สนใจ 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 ของไฟล์ปฏิบัติการหรือเครื่องมือที่ใช้ในการดำเนินการนี้ ต้องตั้งค่าพารามิเตอร์ เพื่อให้การดำเนินการนั้นดำเนินการบนแพลตฟอร์มการดำเนินการที่ถูกต้อง

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

โปรดทราบว่ากฎที่สร้างการดำเนินการนี้จะต้องกำหนด Toolchain นี้ภายในฟังก์ชัน "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 ค่าเริ่มต้นคือ []
ลิสต์หรือ 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 สตริง หรือลำดับสตริง ต้องระบุ
คำสั่ง 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 จะเขียนทับสภาพแวดล้อมเชลล์เริ่มต้นหากเปิดใช้ --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
(ทดลอง) จะตั้งค่าข้อมูลเมตาของไฟล์อินพุตสำหรับป้อนเข้า ซึ่งโดยทั่วไปจะสร้างขึ้นโดย correct_command
exec_group string หรือ None ค่าเริ่มต้นคือ None
เรียกใช้การดำเนินการในแพลตฟอร์มการดำเนินการของกลุ่มผู้บริหารที่ระบุ หากไม่มี จะใช้แพลตฟอร์มการเรียกใช้เริ่มต้นของเป้าหมาย
shadowed_action การดำเนินการ; ค่าเริ่มต้นคือ None
ทำให้การดำเนินการทำงานโดยใช้อินพุตที่ค้นพบของการดำเนินการที่ซ้อนทับซึ่งระบุไว้ซึ่งเพิ่มลงในรายการอินพุตของการดำเนินการ หากไม่มี ให้ใช้เฉพาะอินพุตของการดำเนินการ
resource_set callable หรือ None ค่าเริ่มต้นคือ None
ฟังก์ชัน Callback สำหรับการประมาณการใช้ทรัพยากรหากเรียกใช้ในพื้นที่ โปรดดูctx.actions.run()
toolchain Label หรือ string หรือ None ค่าเริ่มต้นคือ unbound

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

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

โปรดทราบว่ากฎที่สร้างการดำเนินการนี้จะต้องกำหนด Toolchain นี้ภายในฟังก์ชัน "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 required
เอาต์พุตของการดำเนินการนี้
target_file File หรือ None ค่าเริ่มต้นคือ None
คือไฟล์ที่ลิงก์สัญลักษณ์เอาต์พุตจะชี้ไป
target_path string หรือ None ค่าเริ่มต้นคือ None
เส้นทางที่แน่นอนที่ลิงก์สัญลักษณ์ของเอาต์พุตจะชี้ไป โดยไม่มีการทำให้เป็นมาตรฐานหรือการประมวลผลอื่นๆ
is_executable ค่าเริ่มต้นคือ False
ใช้กับ target_file ได้เท่านั้น จะใช้กับ target_path ไม่ได้ หากเป็น "จริง" เมื่อดำเนินการ ระบบจะตรวจสอบเส้นทางของ target_file เพื่อยืนยันว่าสามารถเรียกใช้ได้ และจะรายงานข้อผิดพลาดหากเรียกใช้ไม่ได้ การตั้งค่า is_executable เป็น False ไม่ได้หมายความว่าเป้าหมายจะไม่สามารถเรียกใช้ได้ เพียงแต่ไม่มีการยืนยันเท่านั้น

ฟีเจอร์นี้ใช้กับ 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
กำหนดว่าไฟล์เอาต์พุตควรเป็นไฟล์ที่เรียกใช้ได้หรือไม่