อาร์กส์

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

ออบเจ็กต์ที่แคปซูลข้อมูลที่จำเป็นต่อการสร้างบรรทัดคำสั่งบางส่วนหรือทั้งหมดในลักษณะที่ประหยัดหน่วยความจำ

บ่อยครั้งที่การดำเนินการต้องใช้บรรทัดคำสั่งขนาดใหญ่ซึ่งมีค่าที่สะสมจากทรัพยากร Dependency แบบทรานซิทีฟ เช่น บรรทัดคำสั่งของ Linker อาจแสดงรายการไฟล์ออบเจ็กต์ทั้งหมดที่ไลบรารีทั้งหมดที่ลิงก์อยู่ต้องใช้ แนวทางปฏิบัติแนะนำคือการจัดเก็บข้อมูลแบบทรานซิทีฟดังกล่าวไว้ใน depset เพื่อให้เป้าหมายหลายรายการแชร์ข้อมูลได้ อย่างไรก็ตาม หากผู้เขียนกฎต้องแปลง depsets เหล่านี้เป็นรายการสตริงเพื่อสร้างบรรทัดคำสั่งการดำเนินการ ก็จะทำให้การเพิ่มประสิทธิภาพการแชร์หน่วยความจำนี้ไม่เป็นผล

ด้วยเหตุนี้ ฟังก์ชันการสร้างการทำงานจึงยอมรับออบเจ็กต์ Args นอกเหนือจากสตริง ออบเจ็กต์แต่ละรายการ Args แสดงถึงการต่อสตริงและ Depset โดยมีการเปลี่ยนแปลงที่ไม่บังคับสำหรับการจัดการข้อมูล Args จะไม่ประมวลผล depsets ที่ห่อหุ้มไว้จนกว่าจะถึงระยะการดำเนินการเมื่อถึงเวลาคำนวณบรรทัดคำสั่ง ซึ่งจะช่วยเลื่อนการคัดลอกที่มีค่าใช้จ่ายสูงออกไปจนกว่าระยะการวิเคราะห์จะเสร็จสิ้น ดูข้อมูลเพิ่มเติมได้ที่หน้าการเพิ่มประสิทธิภาพ

Args สร้างขึ้นโดยการเรียกใช้ ctx.actions.args() โดยส่งเป็นพารามิเตอร์ arguments ของ ctx.actions.run() หรือ ctx.actions.run_shell() ได้ การเปลี่ยนแปลงแต่ละครั้งของออบเจ็กต์ Args จะต่อท้ายค่าไปยังบรรทัดคำสั่งสุดท้าย

ฟีเจอร์ map_each ช่วยให้คุณปรับแต่งวิธีแปลงรายการเป็นสตริงได้ หากคุณไม่ได้ระบุฟังก์ชัน map_each Conversion มาตรฐานจะเป็นดังนี้

  • ระบบจะปล่อยให้ค่าที่เป็นสตริงอยู่แล้วเป็นไปตามเดิม
  • ระบบจะเปลี่ยนออบเจ็กต์ File เป็นค่า File.path
  • ออบเจ็กต์ Label จะเปลี่ยนเป็นสตริงที่แสดงถึงออบเจ็กต์นั้นๆ ซึ่งจะกลับไปเป็นออบเจ็กต์เดิมเมื่อมีการแก้ไขในบริบทของที่เก็บหลัก หากเป็นไปได้ การแสดงสตริงจะใช้ชื่อที่ปรากฏของที่เก็บแทนชื่อที่เก็บที่แน่นอน ซึ่งทำให้การแสดงนี้เหมาะสำหรับการใช้ในไฟล์ BUILD แม้ว่าจะไม่มีการรับประกันรูปแบบที่แน่นอนของการแสดง แต่ตัวอย่างทั่วไปคือ //foo:bar, @repo//foo:bar และ @@canonical_name+//foo:bar.bzl
  • ระบบจะเปลี่ยนประเภทอื่นๆ ทั้งหมดเป็นสตริงในลักษณะไม่ได้ระบุ ด้วยเหตุนี้ คุณจึงควรหลีกเลี่ยงการส่งค่าที่ไม่ใช่สตริงหรือประเภท File ไปยัง add() และหากส่งไปยัง add_all() หรือ add_joined() คุณควรระบุฟังก์ชัน map_each

เมื่อใช้การจัดรูปแบบสตริง (พารามิเตอร์ format, format_each และ format_joined ของเมธอด add*()) ระบบจะตีความเทมเพลตรูปแบบในลักษณะเดียวกับการแทนที่ % ในสตริง ยกเว้นว่าเทมเพลตต้องมีตัวยึดตำแหน่งการแทนที่ 1 รายการเท่านั้นและต้องเป็น %s คุณอาจหลีกเลี่ยงเปอร์เซ็นต์ตามตัวอักษรได้โดยใช้ %% ระบบจะใช้การจัดรูปแบบหลังจากแปลงค่าเป็นสตริงตามที่ระบุไว้ข้างต้น

add*()เมธอดแต่ละรายการมีรูปแบบอื่นที่ยอมรับพารามิเตอร์ตำแหน่งเพิ่มเติม ซึ่งเป็นสตริง "ชื่ออาร์กิวเมนต์" ที่จะแทรกก่อนอาร์กิวเมนต์ที่เหลือ สำหรับ add_all และ add_joined ระบบจะไม่เพิ่มสตริงพิเศษหากลำดับกลายเป็นว่าง เช่น การใช้งานเดียวกันสามารถเพิ่ม --foo val1 val2 val3 --bar หรือเพียงแค่ --bar ลงในบรรทัดคำสั่งก็ได้ ขึ้นอยู่กับว่าลำดับที่ระบุมี val1..val3 หรือว่างเปล่า

หากขนาดของบรรทัดคำสั่งอาจยาวเกินขนาดสูงสุดที่ระบบอนุญาต คุณจะส่งอาร์กิวเมนต์ไปยังไฟล์พารามิเตอร์ได้ ดูuse_param_file() และ set_param_file_format()

ตัวอย่าง: สมมติว่าเราต้องการสร้างบรรทัดคำสั่ง

--foo foo1.txt foo2.txt ... fooN.txt --bar bar1.txt,bar2.txt,...,barM.txt --baz
เราใช้ออบเจ็กต์ Args ต่อไปนี้ได้
# foo_deps and bar_deps are depsets containing
# File objects for the foo and bar .txt files.
args = ctx.actions.args()
args.add_all("--foo", foo_deps)
args.add_joined("--bar", bar_deps, join_with=",")
args.add("--baz")
ctx.actions.run(
  ...
  arguments = [args],
  ...
)

สมาชิก

เพิ่ม

Args Args.add(arg_name_or_value, value=unbound, *, format=None)

ผนวกอาร์กิวเมนต์กับบรรทัดคำสั่งนี้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
arg_name_or_value ต้องระบุ
หากส่งพารามิเตอร์ตามตำแหน่ง 2 รายการ ระบบจะตีความพารามิเตอร์นี้เป็นชื่ออาร์กิวเมนต์ ระบบจะเพิ่มชื่ออาร์กิวเมนต์ก่อนค่าโดยไม่มีการประมวลผล หากมีการส่งพารามิเตอร์ตำแหน่งเพียงรายการเดียว ระบบจะตีความว่าเป็น value (ดูด้านล่าง)
value ค่าเริ่มต้นคือ unbound
ออบเจ็กต์ที่จะต่อท้าย ระบบจะแปลงเป็นสตริงโดยใช้การแปลงมาตรฐานที่กล่าวถึงข้างต้น เนื่องจากฟังก์ชันนี้ไม่มีพารามิเตอร์ map_each value จึงควรเป็นสตริงหรือ File ต้องส่งรายการ ทูเพิล Depset หรือไดเรกทอรี File ไปยัง add_all() หรือ add_joined() แทนที่จะใช้วิธีนี้
format string หรือ None ค่าเริ่มต้นคือ None
รูปแบบสตริงรูปแบบที่จะนำไปใช้กับเวอร์ชันสตริงของ value

add_all

Args Args.add_all(arg_name_or_values, values=unbound, *, map_each=None, format_each=None, before_each=None, omit_if_empty=True, uniquify=False, expand_directories=True, terminate_with=None, allow_closure=False)

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

การประมวลผลส่วนใหญ่จะเกิดขึ้นกับรายการอาร์กิวเมนต์ที่จะต่อท้ายตามขั้นตอนต่อไปนี้

  1. Fileแต่ละรายการในไดเรกทอรีจะถูกแทนที่ด้วย File ทั้งหมดที่อยู่ในไดเรกทอรีนั้นแบบเรียกซ้ำ
  2. หากระบุ map_each ระบบจะใช้กับแต่ละรายการ และต่อรายการสตริงที่ได้เพื่อสร้างรายการอาร์กิวเมนต์เริ่มต้น ไม่เช่นนั้น รายการอาร์กิวเมนต์เริ่มต้นจะเป็นผลลัพธ์ของการใช้การแปลงมาตรฐานกับแต่ละรายการ
  3. อาร์กิวเมนต์แต่ละรายการในลิสต์จะจัดรูปแบบด้วย format_each หากมี
  4. หาก uniquify เป็นจริง ระบบจะนำอาร์กิวเมนต์ที่ซ้ำกันออก โดยการเกิดครั้งแรกจะเป็นรายการที่ยังคงอยู่
  5. หากระบุbefore_each ระบบจะแทรกเป็นอาร์กิวเมนต์ใหม่ก่อนอาร์กิวเมนต์ที่มีอยู่แต่ละรายการในรายการ ซึ่งจะเพิ่มจำนวนอาร์กิวเมนต์ที่จะต่อท้ายเป็น 2 เท่า ณ จุดนี้
  6. ยกเว้นในกรณีที่รายการว่างเปล่าและ omit_if_empty เป็นจริง (ค่าเริ่มต้น) ระบบจะแทรกชื่ออาร์กิวเมนต์และ terminate_with เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์สุดท้ายตามลำดับ หากมีการระบุ
โปรดทราบว่าสตริงว่างเป็นอาร์กิวเมนต์ที่ถูกต้องซึ่งขึ้นอยู่กับขั้นตอนการประมวลผลทั้งหมดเหล่านี้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
arg_name_or_values ต้องระบุ
หากส่งพารามิเตอร์ตามตำแหน่ง 2 รายการ ระบบจะตีความพารามิเตอร์นี้เป็นชื่ออาร์กิวเมนต์ ระบบจะเพิ่มชื่ออาร์กิวเมนต์ก่อน values เป็นอาร์กิวเมนต์แยกต่างหากโดยไม่มีการประมวลผล ระบบจะไม่เพิ่มชื่ออาร์กิวเมนต์นี้หาก omit_if_empty เป็นจริง (ค่าเริ่มต้น) และไม่มีการต่อท้ายรายการอื่นๆ (เช่นเดียวกับกรณีที่ values ว่างเปล่าหรือมีการกรองรายการทั้งหมด) หากมีการส่งพารามิเตอร์ตำแหน่งเพียงรายการเดียว ระบบจะตีความว่าเป็น values (ดูด้านล่าง)
values sequence หรือ depset ค่าเริ่มต้นคือ unbound
รายการ ทูเพิล หรือ Depset ที่จะต่อท้ายรายการ
map_each callable หรือ None ค่าเริ่มต้นคือ None
ฟังก์ชันที่แปลงแต่ละรายการเป็นสตริงตั้งแต่ 0 รายการขึ้นไป ซึ่งอาจได้รับการประมวลผลเพิ่มเติมก่อนที่จะต่อท้าย หากไม่ได้ระบุพารามิเตอร์นี้ ระบบจะใช้ Conversion มาตรฐาน

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

ประเภทของค่าที่ส่งคืนจะขึ้นอยู่กับจำนวนอาร์กิวเมนต์ที่จะสร้างสำหรับรายการ

  • ในกรณีทั่วไปที่แต่ละรายการเปลี่ยนเป็นสตริงเดียว ฟังก์ชันควรแสดงสตริงนั้น
  • หากต้องการกรองรายการออกทั้งหมด ฟังก์ชันควรแสดงผล None
  • หากรายการเปลี่ยนเป็นสตริงหลายรายการ ฟังก์ชันจะแสดงผลรายการสตริงเหล่านั้น
การแสดงผลสตริงเดียวหรือ None จะมีผลเหมือนกับการแสดงผลรายการที่มีความยาว 1 หรือ 0 ตามลำดับ อย่างไรก็ตาม การหลีกเลี่ยงการสร้างรายการในกรณีที่ไม่จำเป็นจะช่วยให้โค้ดมีประสิทธิภาพและอ่านได้ง่ายกว่า

โดยปกติแล้ว รายการที่เป็นไดเรกทอรีจะขยายไปยังเนื้อหาโดยอัตโนมัติเมื่อตั้งค่า expand_directories=True อย่างไรก็ตาม การดำเนินการนี้จะไม่ขยายไดเรกทอรีที่อยู่ในค่าอื่นๆ เช่น เมื่อรายการเป็นโครงสร้างที่มีไดเรกทอรีเป็นฟิลด์ ในกรณีนี้ คุณสามารถใช้DirectoryExpanderอาร์กิวเมนต์เพื่อรับไฟล์ของไดเรกทอรีที่ต้องการด้วยตนเองได้

หากต้องการหลีกเลี่ยงการเก็บโครงสร้างข้อมูลขนาดใหญ่ในระยะการวิเคราะห์ไว้ในระยะการดำเนินการโดยไม่ตั้งใจ คุณต้องประกาศฟังก์ชัน map_each ด้วยคำสั่ง def ระดับบนสุด โดยค่าเริ่มต้นฟังก์ชันนี้อาจไม่ใช่การปิดฟังก์ชันที่ซ้อนกัน

คำเตือน: คำสั่ง print() ที่ดำเนินการระหว่างการเรียกใช้ map_each จะไม่สร้างเอาต์พุตที่มองเห็นได้

format_each string หรือ None; ค่าเริ่มต้นคือ None
รูปแบบสตริงที่เป็นรูปแบบที่ไม่บังคับ ซึ่งใช้กับสตริงแต่ละรายการที่ฟังก์ชัน map_each ส่งคืน สตริงรูปแบบต้องมีตัวยึดตำแหน่ง "%s" เพียง 1 รายการ
before_each สตริง หรือ None; ค่าเริ่มต้นคือ None
อาร์กิวเมนต์ที่ไม่บังคับเพื่อต่อท้ายก่อนอาร์กิวเมนต์แต่ละรายการที่ได้มาจาก values
omit_if_empty bool; ค่าเริ่มต้นคือ True
หากเป็นจริงและไม่มีอาร์กิวเมนต์ที่ได้จาก values ที่จะต่อท้าย ระบบจะไม่ประมวลผลเพิ่มเติมและบรรทัดคำสั่งจะไม่มีการเปลี่ยนแปลง หากเป็นเท็จ ระบบจะยังคงต่อท้ายชื่ออาร์กิวเมนต์และ terminate_with (หากระบุ) ไม่ว่าจะมีอาร์กิวเมนต์อื่นๆ หรือไม่ก็ตาม
uniquify bool; ค่าเริ่มต้นคือ False
หากเป็นจริง ระบบจะละเว้นอาร์กิวเมนต์ที่ซ้ำกันซึ่งได้มาจาก values ระบบจะเก็บเฉพาะอาร์กิวเมนต์แรกของแต่ละรายการไว้ โดยปกติแล้วไม่จำเป็นต้องใช้ฟีเจอร์นี้เนื่องจากชุดทรัพยากรที่ขึ้นต่อกันจะละเว้นรายการที่ซ้ำกันอยู่แล้ว แต่ฟีเจอร์นี้อาจมีประโยชน์หาก map_each ส่งสตริงเดียวกันสำหรับหลายรายการ
expand_directories bool; ค่าเริ่มต้นคือ True
หากเป็นจริง ระบบจะขยายไดเรกทอรีใน values เป็นรายการไฟล์แบบแบน ซึ่งจะเกิดขึ้นก่อนที่จะมีการใช้ map_each
terminate_with สตริง หรือ None; ค่าเริ่มต้นคือ None
อาร์กิวเมนต์ที่ไม่บังคับเพื่อผนวกหลังจากอาร์กิวเมนต์อื่นๆ ทั้งหมด ระบบจะไม่เพิ่มอาร์กิวเมนต์นี้หาก omit_if_empty เป็นจริง (ค่าเริ่มต้น) และไม่มีการเพิ่มรายการอื่นๆ (เช่น ในกรณีที่ values ว่างเปล่าหรือมีการกรองรายการทั้งหมด)
allow_closure bool; ค่าเริ่มต้นคือ False
หากเป็นจริง จะอนุญาตให้ใช้ Closure ในพารามิเตอร์ฟังก์ชัน เช่น map_each โดยปกติแล้วไม่จำเป็นต้องทำเช่นนี้ และอาจเสี่ยงต่อการเก็บโครงสร้างข้อมูลขนาดใหญ่ในระยะการวิเคราะห์ไว้ในระยะการดำเนินการ

add_joined

Args Args.add_joined(arg_name_or_values, values=unbound, *, join_with, map_each=None, format_each=None, format_joined=None, omit_if_empty=True, uniquify=False, expand_directories=True, allow_closure=False)

ผนวกอาร์กิวเมนต์กับบรรทัดคำสั่งนี้โดยการเชื่อมค่าหลายค่าเข้าด้วยกันโดยใช้ตัวคั่น ระบบจะประมวลผลรายการแบบเลซีในระหว่างระยะการดำเนินการ

การประมวลผลจะคล้ายกับ add_all() แต่ระบบจะรวมรายการอาร์กิวเมนต์ที่ได้จาก values เป็นอาร์กิวเมนต์เดียวราวกับว่าใช้ join_with.join(...) แล้วจัดรูปแบบโดยใช้เทมเพลตสตริง format_joined ที่ระบุ add_all() ต่างจาก before_each หรือพารามิเตอร์ terminate_with เนื่องจากโดยทั่วไปแล้วพารามิเตอร์เหล่านี้ไม่มีประโยชน์เมื่อรวมรายการเป็นอาร์กิวเมนต์เดียว

หากหลังจากการกรองแล้วไม่มีสตริงที่จะรวมเป็นอาร์กิวเมนต์ และหาก omit_if_empty เป็นจริง (ค่าเริ่มต้น) ระบบจะไม่ประมวลผล ไม่เช่นนั้น หากไม่มีสตริงที่จะรวม แต่ omit_if_empty เป็นเท็จ สตริงที่รวมจะเป็นสตริงว่าง

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
arg_name_or_values ต้องระบุ
หากส่งพารามิเตอร์ตามตำแหน่ง 2 รายการ ระบบจะตีความพารามิเตอร์นี้เป็นชื่ออาร์กิวเมนต์ ระบบจะเพิ่มชื่ออาร์กิวเมนต์ก่อน values โดยไม่มีการประมวลผล ระบบจะไม่เพิ่มอาร์กิวเมนต์นี้หาก omit_if_empty เป็นจริง (ค่าเริ่มต้น) และไม่มีสตริงที่ได้จาก values เพื่อรวมเข้าด้วยกัน (ซึ่งอาจเกิดขึ้นหาก values ว่างเปล่าหรือมีการกรองรายการทั้งหมด) หากมีการส่งพารามิเตอร์ตำแหน่งเพียงรายการเดียว ระบบจะตีความว่าเป็น values (ดูด้านล่าง)
values sequence หรือ depset ค่าเริ่มต้นคือ unbound
รายการ ทูเพิล หรือ depset ที่จะรวมรายการ
join_with string; ต้องระบุ
สตริงตัวคั่นที่ใช้เพื่อรวมสตริงที่ได้จากการใช้ map_each และ format_each เข้าด้วยกันในลักษณะเดียวกับ string.join()
map_each เรียกใช้ได้ หรือ None ค่าเริ่มต้นคือ None
เหมือนกับ add_all
format_each string หรือ None; ค่าเริ่มต้นคือ None
เหมือนกับ add_all
format_joined string หรือ None; ค่าเริ่มต้นคือ None
รูปแบบสตริงที่เป็นรูปแบบเสริมซึ่งใช้กับสตริงที่รวมกัน สตริงรูปแบบต้องมีตัวยึดตำแหน่ง "%s" เพียง 1 รายการ
omit_if_empty bool; ค่าเริ่มต้นคือ True
หากเป็นจริง หากไม่มีสตริงที่จะรวมเข้าด้วยกัน (เนื่องจาก values ว่างเปล่าหรือรายการทั้งหมดถูกกรอง) ระบบจะระงับการประมวลผลเพิ่มเติมทั้งหมดและบรรทัดคำสั่งจะไม่มีการเปลี่ยนแปลง หากเป็นเท็จ แม้ว่าจะไม่มีสตริงที่จะรวมกัน แต่ระบบจะผนวกอาร์กิวเมนต์ 2 รายการ ได้แก่ ชื่ออาร์กิวเมนต์ตามด้วยสตริงว่าง (ซึ่งเป็นการรวมสตริง 0 รายการเชิงตรรกะ)
uniquify bool; ค่าเริ่มต้นคือ False
เหมือนกับสำหรับ add_all
expand_directories bool; ค่าเริ่มต้นคือ True
เหมือนกับสำหรับ add_all
allow_closure bool; ค่าเริ่มต้นคือ False
เหมือนกับสำหรับ add_all

set_param_file_format

Args Args.set_param_file_format(format)

ตั้งค่ารูปแบบของไฟล์พารามิเตอร์ หากมีการใช้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
format string; required
Must be one of:
  • "multiline": แต่ละรายการ (ชื่อหรือค่าของอาร์กิวเมนต์) จะเขียนตามตัวลงในไฟล์พารามิเตอร์โดยมีอักขระขึ้นบรรทัดใหม่ต่อท้าย
  • "shell": เหมือนกับ "multiline" แต่รายการจะอยู่ในเครื่องหมายคำพูดของเชลล์
  • "flag_per_line": เหมือนกับ "multiline" แต่ (1) จะเขียนเฉพาะแฟล็ก (ขึ้นต้นด้วย "--") ลงในไฟล์พารามิเตอร์ และ (2) จะเขียนค่าของแฟล็ก (หากมี) ในบรรทัดเดียวกันโดยใช้ตัวคั่น "=" นี่คือรูปแบบที่ไลบรารีแฟล็กของ Abseil คาดหวัง

รูปแบบจะเป็น "shell" โดยค่าเริ่มต้นหากไม่ได้เรียกใช้

use_param_file

Args Args.use_param_file(param_file_arg, *, use_always=False)

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

Bazel อาจเลือกที่จะละเว้นการเขียนไฟล์พารามิเตอร์ไปยังทรีเอาต์พุตในระหว่างการดำเนินการเพื่อประสิทธิภาพ หากคุณกำลังแก้ไขข้อบกพร่องของ Actions และต้องการตรวจสอบไฟล์พารามิเตอร์ ให้ส่ง --materialize_param_files ไปยังบิลด์

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
param_file_arg string; ต้องระบุ
สตริงรูปแบบที่มี "%s" รายการเดียว หากมีการส่งอาร์กิวเมนต์ไปยังไฟล์พารามิเตอร์ ระบบจะแทนที่อาร์กิวเมนต์เหล่านั้นด้วยอาร์กิวเมนต์ที่ประกอบด้วยสตริงนี้ซึ่งจัดรูปแบบด้วยเส้นทางของไฟล์พารามิเตอร์

ตัวอย่างเช่น หากมีการส่งอาร์กิวเมนต์ไปยังไฟล์พารามิเตอร์ "params.txt" การระบุ "--file=%s" จะทําให้บรรทัดคําสั่งการกระทํามี "--file=params.txt"

use_always bool; ค่าเริ่มต้นคือ False
ว่าจะส่งอาร์กิวเมนต์ไปยังไฟล์พารามิเตอร์เสมอหรือไม่ หากเป็นเท็จ Bazel จะตัดสินว่าต้องส่งอาร์กิวเมนต์หรือไม่โดยอิงตามระบบและความยาวของอาร์กิวเมนต์