Bazel มีตัวเลือกมากมาย ตัวเลือกบางอย่างมีการเปลี่ยนแปลงบ่อยครั้ง (เช่น --subcommands
) ในขณะที่ตัวอื่นๆ ยังคงเหมือนเดิมในบิลด์หลายรายการ (เช่น --package_path
) หากต้องการหลีกเลี่ยงการระบุตัวเลือกที่ไม่เปลี่ยนแปลงเหล่านี้สําหรับทุกบิลด์ (และคําสั่งอื่นๆ) คุณสามารถระบุตัวเลือกในไฟล์การกำหนดค่าที่เรียกว่า .bazelrc
ไฟล์ .bazelrc
อยู่ที่ไหน
Bazel จะค้นหาไฟล์การกำหนดค่าที่ไม่บังคับในตำแหน่งต่อไปนี้ ตามลำดับที่แสดงด้านล่าง ระบบจะตีความตัวเลือกตามลำดับนี้ ดังนั้นตัวเลือกในไฟล์ต่อๆ มาอาจลบล้างค่าจากไฟล์ก่อนหน้าได้หากมีข้อขัดแย้ง ตัวเลือกทั้งหมดที่ควบคุมว่าจะโหลดไฟล์เหล่านี้ใดบ้างคือตัวเลือกเริ่มต้น ซึ่งหมายความว่าจะต้องเกิดขึ้นหลัง bazel
และก่อนคำสั่ง (build
, test
ฯลฯ)
ไฟล์ RC ของระบบ ยกเว้นจะมี
--nosystem_rc
อยู่เส้นทาง:
- ใน Linux/macOS/Unixes:
/etc/bazel.bazelrc
- ใน Windows:
%ProgramData%\bazel.bazelrc
ข้อผิดพลาดก็จะไม่เป็นข้อผิดพลาดหากไม่มีไฟล์นี้
หากต้องใช้ตำแหน่งอื่นที่ระบบระบุ คุณต้องสร้างไบนารีบาเซลที่กำหนดเอง โดยลบล้างค่า
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
ตัวอย่าง
ตัวอย่างไฟล์ ~/.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-file ในหน้าแรกที่
$HOME/.bazelrc
ไฟล์ bazelrc แต่ละไฟล์ที่ระบุไว้ที่นี่มีแฟล็กที่เกี่ยวข้องซึ่งสามารถใช้เพื่อปิดใช้งาน (เช่น --nosystem_rc
, --noworkspace_rc
, --nohome_rc
) นอกจากนี้คุณสามารถทำให้ Bazel ละเว้น bazelrcs ทั้งหมดได้โดยส่งตัวเลือกการเริ่มต้น --ignore_all_rc_files