Bazel มีตัวเลือกมากมาย ตัวเลือกบางอย่างจะแตกต่างกันไปบ่อยครั้ง (เช่น --subcommands
) ในขณะที่ตัวอื่นๆ ยังคงเหมือนเดิมในหลายบิลด์ (เช่น --package_path
) หากต้องการหลีกเลี่ยงการระบุตัวเลือกที่ไม่เปลี่ยนแปลงเหล่านี้สำหรับทุกบิลด์ (และคำสั่งอื่นๆ) คุณสามารถระบุตัวเลือกในไฟล์การกำหนดค่าที่เรียกว่า .bazelrc
ไฟล์ .bazelrc
อยู่ที่ไหน
Bazel จะค้นหาไฟล์การกำหนดค่าซึ่งไม่บังคับในตำแหน่งต่อไปนี้ ตามลำดับที่แสดงด้านล่าง ระบบจะตีความตัวเลือกตามลำดับนี้ ดังนั้นตัวเลือกในไฟล์ต่อๆ ไปจะลบล้างค่าจากไฟล์ก่อนหน้าได้ ในกรณีที่มีข้อขัดแย้ง ตัวเลือกทั้งหมดที่ควบคุมว่าจะโหลดไฟล์ใดคือตัวเลือกเริ่มต้น ซึ่งหมายความว่าจะต้องเกิดขึ้นหลัง bazel
และก่อนคำสั่ง (build
, test
ฯลฯ)
ไฟล์ RC ของระบบ ยกเว้นว่าจะมี
--nosystem_rc
อยู่เส้นทาง:
- ใน Linux/macOS/Unixes:
/etc/bazel.bazelrc
- ใน Windows:
%ProgramData%\bazel.bazelrc
ข้อผิดพลาดจะไม่ถือว่ามีข้อผิดพลาดหากไม่มีไฟล์นี้
หากต้องใช้ตำแหน่งอื่นที่ระบบระบุ คุณต้องสร้างไบนารี Bazel ที่กำหนดเองโดยลบล้างค่า
BAZEL_SYSTEM_BAZELRC_PATH
ใน//src/main/cpp:option_processor
ตำแหน่งที่ระบบระบุอาจมีการอ้างอิงตัวแปรสภาพแวดล้อม เช่น${VAR_NAME}
บน Unix หรือ%VAR_NAME%
ใน Windows- ใน Linux/macOS/Unixes:
ไฟล์ RC ของพื้นที่ทำงาน ยกเว้นว่าจะมี
--noworkspace_rc
อยู่เส้นทาง:
.bazelrc
ในไดเรกทอรีพื้นที่ทำงาน (ถัดจากไฟล์WORKSPACE
หลัก)ข้อผิดพลาดจะไม่ถือว่ามีข้อผิดพลาดหากไม่มีไฟล์นี้
ไฟล์ RC ของบ้าน ยกเว้นว่าจะมี
--nohome_rc
อยู่เส้นทาง:
- ใน Linux/macOS/Unixes:
$HOME/.bazelrc
- ใน Windows:
%USERPROFILE%\.bazelrc
(หากมี) หรือ%HOME%/.bazelrc
ข้อผิดพลาดจะไม่ถือว่ามีข้อผิดพลาดหากไม่มีไฟล์นี้
- ใน Linux/macOS/Unixes:
ไฟล์ RC ที่ผู้ใช้ระบุ หากระบุด้วย
--bazelrc=file
การตั้งค่าสถานะนี้เป็นตัวเลือกที่ไม่บังคับ แต่สามารถระบุได้หลายครั้ง
/dev/null
บ่งบอกว่าระบบจะไม่สนใจ--bazelrc
เพิ่มเติมทั้งหมด ซึ่งเป็นประโยชน์ในการปิดใช้การค้นหาไฟล์ rc ของผู้ใช้ เช่น ในบิลด์ของรุ่นเช่น
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
- อ่าน
x.rc
และy.rc
แล้ว z.rc
จะถูกละเว้นเนื่องจาก/dev/null
ก่อนหน้า
- อ่าน
นอกจากไฟล์การกำหนดค่าที่ไม่บังคับนี้แล้ว Bazel จะมองหาไฟล์ rc ส่วนกลาง ดูรายละเอียดเพิ่มเติมได้ที่ส่วน bazelrc ส่วนกลาง
ไวยากรณ์และความหมาย .bazelrc
เช่นเดียวกับไฟล์ UNIX "rc" ไฟล์ .bazelrc
เป็นไฟล์ข้อความที่มีไวยากรณ์แบบขึ้นบรรทัดใหม่ ระบบจะไม่สนใจบรรทัดและบรรทัดว่างที่เริ่มต้นด้วย #
(ความคิดเห็น) แต่ละบรรทัดจะมีลำดับของคำต่างๆ ซึ่งแปลงเป็นโทเค็นตามกฎเดียวกันกับเชลล์ของ Bourne
การนำเข้า
บรรทัดที่เริ่มต้นด้วย import
หรือ try-import
มีความพิเศษ กล่าวคือ ใช้เพื่อโหลดไฟล์ "rc" อื่นๆ หากต้องการระบุเส้นทางที่สัมพันธ์กับรูทของพื้นที่ทำงาน ให้เขียน import %workspace%/path/to/bazelrc
ความแตกต่างระหว่าง import
และ try-import
คือ Bazel จะล้มเหลวหากไฟล์ของ import
หายไป (หรืออ่านไม่ได้) แต่ไม่ใช่ไฟล์ของ try-import
ลำดับความสำคัญในการนำเข้า:
- ตัวเลือกในไฟล์ที่นำเข้าจะมีลำดับความสำคัญเหนือกว่าตัวเลือกที่ระบุไว้ก่อนคำสั่งนำเข้า
- ตัวเลือกที่ระบุหลังจากคำสั่งการนำเข้าจะมีความสำคัญเหนือกว่าตัวเลือกในไฟล์ที่นำเข้า
- ตัวเลือกในไฟล์ที่นำเข้าในภายหลังจะมีลำดับความสำคัญเหนือกว่าไฟล์ที่นำเข้าก่อนหน้านี้
ค่าเริ่มต้นของตัวเลือก
บรรทัดส่วนใหญ่ของ bazelrc จะกำหนดค่าตัวเลือกเริ่มต้น คำแรกในแต่ละบรรทัด จะระบุการใช้ค่าเริ่มต้นเหล่านี้
startup
: ตัวเลือกการเริ่มต้นซึ่งมาก่อนคำสั่ง และอธิบายไว้ในbazel help startup_options
common
: ตัวเลือกที่ควรใช้กับคำสั่ง Bazel ทั้งหมดที่รองรับ หากคําสั่งไม่รองรับตัวเลือกที่ระบุในลักษณะนี้ ระบบจะไม่สนใจตัวเลือกนั้นตราบใดที่ใช้ได้กับคําสั่ง Bazel อื่นบางรายการ โปรดทราบว่าการดำเนินการนี้จะมีผลเฉพาะกับชื่อตัวเลือกเท่านั้น: หากคำสั่งปัจจุบันยอมรับตัวเลือกที่มีชื่อที่ระบุ แต่ไม่รองรับค่าที่ระบุ ก็จะดำเนินการไม่สำเร็จalways
: ตัวเลือกที่มีผลกับคำสั่ง Bazel ทั้งหมด หากคำสั่งไม่รองรับตัวเลือกที่ระบุในลักษณะนี้ ก็จะล้มเหลวcommand
: คำสั่ง Bazel เช่นbuild
หรือquery
ที่จะใช้ตัวเลือก โดยตัวเลือกเหล่านี้จะใช้กับคำสั่งทั้งหมดที่รับค่ามาจากคำสั่งที่ระบุด้วย (เช่นtest
รับค่าจากbuild
)
แต่ละบรรทัดอาจใช้มากกว่า 1 ครั้ง และอาร์กิวเมนต์ที่ตามหลังคำแรกจะรวมกันเสมือนว่าปรากฏในบรรทัดเดียว (ผู้ใช้ CVS ซึ่งเป็นเครื่องมืออื่นที่มีอินเทอร์เฟซบรรทัดคำสั่ง "Swiss army knife" จะพบไวยากรณ์ที่คล้ายกับของ .cvsrc
) ตัวอย่างเช่น บรรทัดต่อไปนี้
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
จะรวมเป็น
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
ดังนั้น แฟล็กที่มีประสิทธิภาพคือ --verbose_failures
และ --test_tmpdir=/tmp/bar
ลำดับความสำคัญของตัวเลือก:
- ตัวเลือกในบรรทัดคำสั่งจะมีความสำคัญเหนือกว่าตัวเลือกในไฟล์ rc เสมอ
ตัวอย่างเช่น หากไฟล์ rc ระบุว่า
build -c opt
แต่แฟล็กบรรทัดคำสั่งเป็น-c dbg
แฟล็กบรรทัดคำสั่งจะมีความสำคัญเหนือกว่า ภายในไฟล์ rc ลำดับความสำคัญจะมีการควบคุมโดยความจำเพาะ โดยบรรทัดสำหรับคำสั่งที่เจาะจงมากขึ้นจะมีความสำคัญเหนือกว่าบรรทัดสำหรับคำสั่งที่เจาะจงน้อยกว่า
ความจำเพาะจะกำหนดโดยการสืบทอด บางคำสั่งจะสืบทอดตัวเลือกจากคำสั่งอื่นๆ ซึ่งทำให้คำสั่งที่รับช่วงมามีความเฉพาะเจาะจงมากกว่าคำสั่งพื้นฐาน ตัวอย่างเช่น
test
รับค่ามาจากคำสั่งbuild
ดังนั้นแฟล็กbazel build
ทั้งหมดจะใช้ได้กับbazel test
และบรรทัดbuild
ทั้งหมดจะมีผลกับbazel test
ด้วย เว้นแต่จะมีบรรทัดtest
สำหรับตัวเลือกเดียวกัน หากไฟล์ rc ระบุว่า:test -c dbg --test_env=PATH
build -c opt --verbose_failures
bazel build //foo
จะใช้-c opt --verbose_failures
และbazel test //foo
จะใช้--verbose_failures -c dbg --test_env=PATH
กราฟการรับช่วงค่า (ความจำเพาะ) คือ
- ทุกคำสั่งจะสืบทอดมาจาก
common
- คำสั่งต่อไปนี้รับค่าจาก (และมีความเฉพาะเจาะจงมากกว่า)
build
:test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
และaquery
coverage
รับช่วงมาจากtest
- ทุกคำสั่งจะสืบทอดมาจาก
ระบบจะแยกวิเคราะห์ตัวเลือก 2 บรรทัดที่ระบุสำหรับคำสั่งเดียวกันโดยมีความเฉพาะเจาะจงเท่ากันตามลำดับที่ตัวเลือกปรากฏในไฟล์
เนื่องจากกฎลำดับความสำคัญนี้ไม่ตรงกับลำดับของไฟล์ จึงช่วยให้อ่านได้ง่ายขึ้นหากคุณเรียงลำดับตามลำดับความสำคัญในไฟล์ rc โดยขึ้นต้นด้วยตัวเลือก
common
ที่ด้านบน และลงท้ายด้วยคำสั่งที่เจาะจงที่สุดที่ด้านล่างของไฟล์ วิธีนี้ทำให้ลำดับการอ่านตัวเลือกจะเหมือนกับลำดับการใช้ตัวเลือก ซึ่งจะเข้าใจง่ายขึ้น
อาร์กิวเมนต์ที่ระบุในบรรทัดของไฟล์ rc อาจมีอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก เช่น ชื่อของเป้าหมายบิลด์ และอื่นๆ ซึ่งคล้ายกับตัวเลือกที่ระบุในไฟล์เดียวกัน จะมีความสำคัญต่ำกว่าระดับข้างเคียงในบรรทัดคำสั่ง และจะเพิ่มไว้หน้ารายการอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกอย่างชัดเจนเสมอ
--config
นอกจากการตั้งค่าเริ่มต้นของตัวเลือกแล้ว ไฟล์ rc สามารถใช้เพื่อจัดกลุ่มตัวเลือกและใช้ชวเลขสำหรับการจัดกลุ่มทั่วไป ซึ่งทำได้ด้วยการเพิ่มส่วนต่อท้าย :name
ในคำสั่ง โดยค่าเริ่มต้น ระบบจะไม่สนใจตัวเลือกเหล่านี้ แต่จะรวมอยู่เมื่อมีตัวเลือก --config=name
อยู่ในบรรทัดคำสั่งหรือในไฟล์ .bazelrc
แบบเกิดซ้ำ แม้จะอยู่ในคำจำกัดความการกำหนดค่าอื่นก็ตาม ตัวเลือกที่ระบุโดย command:name
จะขยายออกสำหรับคำสั่งที่เกี่ยวข้องตามลำดับความสำคัญที่อธิบายไว้ข้างต้นเท่านั้น
--config=foo
จะขยายไปยังตัวเลือกที่กำหนดไว้ในไฟล์ rc แบบ "in-place" เพื่อให้ตัวเลือกที่ระบุสำหรับการกำหนดค่ามีลำดับความสำคัญเดียวกับที่ตัวเลือก --config=foo
มี
ไวยากรณ์นี้ไม่ได้ครอบคลุมถึงการใช้ startup
เพื่อตั้งค่าตัวเลือกการเริ่มต้นใช้งาน ระบบจะไม่สนใจการตั้งค่า startup:config-name --some_startup_option
ใน .bazelrc
--enable_platform_specific_config
การกำหนดค่าเฉพาะแพลตฟอร์มใน .bazelrc
จะเปิดใช้ได้โดยอัตโนมัติโดยใช้ --enable_platform_specific_config
เช่น หากระบบปฏิบัติการของโฮสต์คือ Linux และเรียกใช้คำสั่ง build
ระบบจะเปิดใช้การกำหนดค่า build:linux
โดยอัตโนมัติ ตัวระบุระบบปฏิบัติการที่รองรับคือ linux
, macos
, windows
, freebsd
และ openbsd
การเปิดใช้แฟล็กนี้เทียบเท่ากับการใช้ --config=linux
ใน Linux, --config=windows
ใน Windows และอื่นๆ
โปรดดู --enable_platform_specific_config
ตัวอย่าง
นี่คือตัวอย่างไฟล์ ~/.bazelrc
# Bob's Bazel option defaults
startup --host_jvm_args=-XX:-UseParallelGC
import /home/bobs_project/bazelrc
build --show_timestamps --keep_going --jobs 600
build --color=yes
query --keep_going
# Definition of --config=memcheck
build:memcheck --strip=never --test_timeout=3600
ไฟล์อื่นๆ ที่ควบคุมลักษณะการทำงานของ Bazel
.bazelignore
คุณสามารถระบุไดเรกทอรีภายในพื้นที่ทำงานที่คุณต้องการให้ Bazel ละเว้นได้ เช่น โปรเจ็กต์ที่เกี่ยวข้องซึ่งใช้ระบบบิลด์อื่นๆ วางไฟล์ชื่อ .bazelignore
ที่รูทของพื้นที่ทำงานและเพิ่มไดเรกทอรีที่คุณต้องการให้ Bazel ละเว้นบรรทัดละ 1 รายการ รายการจะสัมพัทธ์กับรูทของพื้นที่ทำงาน
ไฟล์ bazelrc ส่วนกลาง
Bazel อ่านไฟล์ bazelrc ที่ไม่บังคับตามลำดับต่อไปนี้
- ไฟล์ rc ของระบบอยู่ที่
etc/bazel.bazelrc
- ไฟล์ rc ของ Workspace อยู่ที่
$workspace/tools/bazel.rc
- ไฟล์ rc ของ Home อยู่ที่
$HOME/.bazelrc
ไฟล์ bazelrc แต่ละไฟล์ที่ระบุไว้ที่นี่มีแฟล็กที่เกี่ยวข้องซึ่งสามารถใช้เพื่อปิดได้ (เช่น --nosystem_rc
, --noworkspace_rc
, --nohome_rc
) และคุณยังทำให้ Bazel ละเว้น bazelrcs ทั้งหมดได้โดยผ่านตัวเลือกการเริ่มต้น --ignore_all_rc_files