Bazel chấp nhận nhiều lựa chọn. Một số lựa chọn thay đổi thường xuyên (ví dụ:
--subcommands) trong khi các lựa chọn khác vẫn giữ nguyên trong nhiều bản dựng (chẳng hạn như
--package_path). Để tránh chỉ định các lựa chọn không thay đổi này cho mọi bản dựng
(và các lệnh khác), bạn có thể chỉ định các lựa chọn trong một tệp cấu hình có tên là
.bazelrc.
Tệp .bazelrc nằm ở đâu?
Bazel tìm kiếm các tệp cấu hình không bắt buộc ở những vị trí sau,
theo thứ tự được hiển thị bên dưới. Các lựa chọn được diễn giải theo thứ tự này, vì vậy
các lựa chọn trong các tệp sau này có thể ghi đè giá trị từ một tệp trước đó nếu xảy ra
xung đột. Tất cả các lựa chọn kiểm soát tệp nào trong số này được tải đều là
các lựa chọn khởi động. Điều này có nghĩa là các lựa chọn này phải xuất hiện sau bazel và
trước lệnh (build, test, v.v.).
Tệp RC hệ thống, trừ phi có
--nosystem_rc.Đường dẫn:
- Trên Linux/macOS/Unix:
/etc/bazel.bazelrc - Trên Windows:
%ProgramData%\bazel.bazelrc
Nếu tệp này không tồn tại thì không phải là lỗi.
Nếu cần một vị trí khác do hệ thống chỉ định, bạn phải tạo một tệp nhị phân Bazel tuỳ chỉnh, ghi đè giá trị
BAZEL_SYSTEM_BAZELRC_PATHtrong//src/main/cpp:option_processor. Vị trí do hệ thống chỉ định có thể chứa các tham chiếu biến môi trường, chẳng hạn như${VAR_NAME}trên Unix hoặc%VAR_NAME%trên Windows.- Trên Linux/macOS/Unix:
Tệp RC không gian làm việc, trừ phi có
--noworkspace_rc.Đường dẫn:
.bazelrctrong thư mục không gian làm việc (bên cạnh tệp chínhWORKSPACE).Nếu tệp này không tồn tại thì không phải là lỗi.
Tệp RC chính, trừ phi có
--nohome_rc.Đường dẫn:
- Trên Linux/macOS/Unix:
$HOME/.bazelrc - Trên Windows:
%USERPROFILE%\.bazelrcnếu tồn tại hoặc%HOME%/.bazelrc
Nếu tệp này không tồn tại thì không phải là lỗi.
- Trên Linux/macOS/Unix:
Tệp RC do người dùng chỉ định, nếu được chỉ định bằng
--bazelrc=fileCờ này là không bắt buộc nhưng cũng có thể được chỉ định nhiều lần.
/dev/nullcho biết rằng tất cả--bazelrctiếp theo sẽ bị bỏ qua. Điều này hữu ích để tắt tính năng tìm kiếm tệp rc của người dùng, chẳng hạn như trong các bản dựng phát hành .Ví dụ:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rcx.rcvày.rcđược đọc.z.rcbị bỏ qua do/dev/nulltrước đó.
Ngoài tệp cấu hình không bắt buộc này, Bazel còn tìm kiếm một tệp rc toàn cầu. Để biết thêm thông tin, hãy xem phần bazelrc toàn cầu.
.bazelrc cú pháp và ngữ nghĩa
Giống như tất cả các tệp "rc" UNIX, tệp .bazelrc là một tệp văn bản có ngữ pháp dựa trên dòng. Các dòng trống và các dòng bắt đầu bằng # (nhận xét) sẽ bị bỏ qua. Mỗi
dòng chứa một chuỗi các từ được mã hoá theo cùng một
quy tắc như Bourne shell.
Nhập
Các dòng bắt đầu bằng import hoặc try-import là đặc biệt: sử dụng các dòng này để tải
các tệp "rc" khác. Để chỉ định một đường dẫn tương ứng với thư mục gốc của không gian làm việc,
hãy viết import %workspace%/path/to/bazelrc.
Sự khác biệt giữa import và try-import là Bazel sẽ gặp lỗi nếu tệp
import' bị thiếu (hoặc không thể đọc được), nhưng không phải đối với tệp try-import'
.
Mức độ ưu tiên nhập:
- Các lựa chọn trong tệp đã nhập sẽ được ưu tiên hơn các lựa chọn được chỉ định trước câu lệnh nhập.
- Các lựa chọn được chỉ định sau câu lệnh nhập sẽ được ưu tiên hơn các lựa chọn trong tệp đã nhập.
- Các lựa chọn trong các tệp được nhập sau này sẽ được ưu tiên hơn các tệp được nhập trước đó.
Giá trị mặc định của lựa chọn
Hầu hết các dòng của bazelrc đều xác định các giá trị lựa chọn mặc định. Từ đầu tiên trên mỗi dòng chỉ định thời điểm áp dụng các giá trị mặc định này:
startup: các lựa chọn khởi động, xuất hiện trước lệnh và được mô tả trongbazel help startup_options.common: các lựa chọn cần được áp dụng cho tất cả các lệnh Bazel hỗ trợ các lựa chọn đó. Nếu một lệnh không hỗ trợ một lựa chọn được chỉ định theo cách này, thì lựa chọn đó sẽ bị bỏ qua miễn là lựa chọn đó hợp lệ đối với một số lệnh Bazel khác. Xin lưu ý rằng điều này chỉ áp dụng cho tên lựa chọn: Nếu lệnh hiện tại chấp nhận một lựa chọn có tên được chỉ định, nhưng không hỗ trợ giá trị được chỉ định, thì lệnh đó sẽ gặp lỗi.always: các lựa chọn áp dụng cho tất cả các lệnh Bazel. Nếu một lệnh không hỗ trợ một lựa chọn được chỉ định theo cách này, thì lệnh đó sẽ gặp lỗi.command: Lệnh Bazel, chẳng hạn nhưbuildhoặcquerymà các lựa chọn áp dụng. Các lựa chọn này cũng áp dụng cho tất cả các lệnh kế thừa từ lệnh được chỉ định. (Ví dụ:testkế thừa từbuild.)
Bạn có thể sử dụng mỗi dòng này nhiều lần và các đối số theo sau từ
đầu tiên được kết hợp như thể chúng đã xuất hiện trên một dòng. (Người dùng CVS,
một công cụ khác có giao diện dòng lệnh "dao quân đội Thuỵ Sĩ", sẽ thấy
cú pháp tương tự như cú pháp của .cvsrc.) Ví dụ: các dòng:
build --test_tmpdir=/tmp/foo --verbose_failuresbuild --test_tmpdir=/tmp/bar
được kết hợp thành:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/barvì vậy, các cờ có hiệu lực là --verbose_failures và --test_tmpdir=/tmp/bar.
Mức độ ưu tiên của lựa chọn:
- Các lựa chọn trên dòng lệnh luôn được ưu tiên hơn các lựa chọn trong tệp rc.
Ví dụ: nếu một tệp rc cho biết
build -c optnhưng cờ dòng lệnh là-c dbg, thì cờ dòng lệnh sẽ được ưu tiên. Trong tệp rc, mức độ ưu tiên được điều chỉnh theo mức độ cụ thể: các dòng cho một lệnh cụ thể hơn sẽ được ưu tiên hơn các dòng cho một lệnh ít cụ thể hơn.
Mức độ cụ thể được xác định bằng tính kế thừa. Một số lệnh kế thừa các lựa chọn từ các lệnh khác, khiến lệnh kế thừa cụ thể hơn lệnh cơ sở lệnh. Ví dụ:
testkế thừa từ lệnhbuild, vì vậy, tất cả các cờbazel buildđều hợp lệ đối vớibazel testvà tất cả các dòngbuildcũng áp dụng chobazel testtrừ phi có một dòngtestcho cùng một lựa chọn. Nếu tệp rc cho biết:test -c dbg --test_env=PATHbuild -c opt --verbose_failuresthì
bazel build //foosẽ sử dụng-c opt --verbose_failuresvàbazel test //foosẽ sử dụng--verbose_failures -c dbg --test_env=PATH.Biểu đồ kế thừa (mức độ cụ thể) là:
- Mọi lệnh đều kế thừa từ
common - Các lệnh sau đây kế thừa từ (và cụ thể hơn)
build:test,run,clean,mobile-install,info,print_action,config,cqueryvàaquery coveragekế thừa từtest
- Mọi lệnh đều kế thừa từ
Hai dòng chỉ định các lựa chọn cho cùng một lệnh ở mức độ cụ thể bằng nhau sẽ được phân tích cú pháp theo thứ tự xuất hiện trong tệp.
Vì quy tắc ưu tiên này không khớp với thứ tự tệp, nên bạn nên tuân theo thứ tự ưu tiên trong các tệp rc để dễ đọc hơn: bắt đầu bằng các lựa chọn
commonở trên cùng và kết thúc bằng các lệnh cụ thể nhất ở cuối tệp. Bằng cách này, thứ tự đọc các lựa chọn sẽ giống như thứ tự áp dụng các lựa chọn, giúp bạn dễ hiểu hơn.
Các đối số được chỉ định trên một dòng của tệp rc có thể bao gồm các đối số mà không phải là lựa chọn, chẳng hạn như tên của các mục tiêu bản dựng, v.v. Giống như các lựa chọn được chỉ định trong cùng một tệp, các đối số này có mức độ ưu tiên thấp hơn các đối số cùng cấp trên dòng lệnh và luôn được thêm vào danh sách rõ ràng của các đối số không phải là lựa chọn.
--config
Ngoài việc đặt các giá trị mặc định của lựa chọn, tệp rc có thể được dùng để nhóm các lựa chọn
và cung cấp một cách viết tắt cho các nhóm phổ biến. Bạn có thể thực hiện việc này bằng cách thêm :name
hậu tố vào lệnh. Theo mặc định, các lựa chọn này sẽ bị bỏ qua, nhưng sẽ được
đưa vào khi có lựa chọn --config=name,
trên dòng lệnh hoặc trong tệp .bazelrc, một cách đệ quy, ngay cả bên trong
một định nghĩa cấu hình khác. Các lựa chọn do command:name chỉ định sẽ chỉ được
mở rộng cho các lệnh áp dụng, theo thứ tự ưu tiên được mô tả ở trên.
--config=foo mở rộng thành các lựa chọn được xác định trong
các tệp rc "tại chỗ" để các lựa chọn
được chỉ định cho cấu hình có cùng mức độ ưu tiên mà lựa chọn --config=foo
đã có.
Cú pháp này không mở rộng đến việc sử dụng startup để đặt
các lựa chọn khởi động. Việc đặt
startup:config-name --some_startup_option trong .bazelrc sẽ bị bỏ qua.
Ví dụ:
Dưới đây là tệp ~/.bazelrc mẫu:
# 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
Các tệp khác điều chỉnh hành vi của Bazel
.bazelignore
Bạn có thể chỉ định các thư mục trong không gian làm việc
mà bạn muốn Bazel bỏ qua, chẳng hạn như các dự án liên quan
sử dụng các hệ thống bản dựng khác. Đặt một tệp có tên là
.bazelignore ở thư mục gốc của không gian làm việc
và thêm các thư mục bạn muốn Bazel bỏ qua, mỗi thư mục trên một
dòng. Các mục tương ứng với thư mục gốc của không gian làm việc.
Tệp bazelrc toàn cầu
Bazel đọc các tệp bazelrc không bắt buộc theo thứ tự sau:
- Tệp rc hệ thống nằm ở
etc/bazel.bazelrc. - Tệp rc không gian làm việc nằm ở
$workspace/tools/bazel.rc. - Tệp rc chính nằm ở
$HOME/.bazelrc
Mỗi tệp bazelrc được liệt kê ở đây đều có một cờ tương ứng mà bạn có thể dùng để
tắt các tệp đó (ví dụ: --nosystem_rc, --noworkspace_rc, --nohome_rc). Bạn cũng có thể yêu cầu Bazel bỏ qua tất cả các tệp bazelrc bằng cách truyền lựa chọn khởi động --ignore_all_rc_files
.