Bazel chấp nhận nhiều lựa chọn. Một số lựa chọn thường xuyên thay đổi (ví dụ: --subcommands
) trong khi những 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 những 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, gọi là .bazelrc
.
Các tệp .bazelrc
nằm ở đâu?
Bazel tìm các tệp cấu hình không bắt buộc ở những vị trí sau, theo thứ tự như 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 có thể ghi đè một giá trị 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 những tệp nào trong số này được tải đều là lựa chọn khởi động, tức là chúng 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_PATH
trong//src/main/cpp:option_processor
. Vị trí do hệ thống chỉ định có thể chứa các tham chiếu đến 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 của không gian làm việc, trừ phi có
--noworkspace_rc
.Đường dẫn:
.bazelrc
trong thư mục không gian làm việc (bên cạnh tệpMODULE.bazel
chính).Nếu tệp này không tồn tại thì đó không phải là lỗi.
Tệp RC của thư mục gốc, trừ phi có
--nohome_rc
.Đường dẫn:
- Trên Linux/macOS/Unix:
$HOME/.bazelrc
- Trên Windows:
%USERPROFILE%\.bazelrc
nếu có 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=file
Cờ này không bắt buộc nhưng bạn cũng có thể chỉ định nhiều lần.
/dev/null
cho biết tất cả--bazelrc
tiếp theo sẽ bị bỏ qua. Điều này hữu ích khi 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.rc
x.rc
vày.rc
được đọc.z.rc
bị bỏ qua do/dev/null
trướ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 chung. Để biết thêm thông tin chi tiết, hãy xem phần bazelrc chung.
Cú pháp và ngữ nghĩa của .bazelrc
Giống như tất cả các tệp "rc" của 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à 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 từ, được mã hoá theo các quy tắc tương tự như Bourne shell.
Nhập
Các dòng bắt đầu bằng import
hoặc try-import
là các dòng đặc biệt: hãy 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 đọc được), nhưng không phải như vậy đố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 tệp được nhập sau sẽ được ưu tiên hơn các tệp được nhập trước đó.
Chế độ 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ị mặc định của lựa chọn. 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 tuỳ chọn: Nếu lệnh hiện tại chấp nhận một tuỳ chọn có tên được chỉ định, nhưng không hỗ trợ giá trị được chỉ định, thì lệnh đó sẽ không thành công.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ẽ không thành công.command
: Lệnh Bazel, chẳng hạn nhưbuild
hoặcquery
mà 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 đã chỉ định. (Ví dụ:test
kế thừa từbuild
.)
Bạn có thể sử dụng từng dòng này nhiều lần và các đối số theo sau từ đầu tiên sẽ được kết hợp như thể chúng xuất hiện trên một dòng duy nhất. (Người dùng CVS, một công cụ khác có giao diện dòng lệnh "dao đa năng", sẽ thấy cú pháp tương tự như cú pháp của .cvsrc
.) Ví dụ: các dòng sau:
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
được kết hợp như sau:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
vậy các cờ hiệu quả là --verbose_failures
và --test_tmpdir=/tmp/bar
.
Quyền ư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 có nội dung là
build -c opt
như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.
Độ đặc hiệu được xác định bằng tính kế thừa. Một số lệnh kế thừa các tuỳ chọn từ những lệnh khác, khiến lệnh kế thừa cụ thể hơn lệnh cơ sở. Ví dụ:
test
kế thừa từ lệnhbuild
, vì vậy, tất cả cờbazel build
đều hợp lệ chobazel test
và tất cả các dòngbuild
cũng áp dụng chobazel test
trừ phi có dòngtest
cho cùng một lựa chọn. Nếu tệp rc cho biết:test -c dbg --test_env=PATH
build -c opt --verbose_failures
thì
bazel build //foo
sẽ dùng-c opt --verbose_failures
vàbazel test //foo
sẽ dùng--verbose_failures -c dbg --test_env=PATH
.Biểu đồ kế thừa (tính 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
,cquery
vàaquery
coverage
,fetch
vàvendor
kế 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 ở độ đặc hiệu 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 thứ tự ưu tiên này không khớp với thứ tự tệp, nên sẽ dễ đọc hơn nếu bạn tuân theo thứ tự ưu tiên trong các tệp rc: 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 với thứ tự áp dụng các lựa chọn, giúp người dùng 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ố 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. Những lựa chọn này, giống như các lựa chọn được chỉ định trong cùng một tệp, có mức độ ưu tiên thấp hơn so với các lựa chọn cùng cấp trên dòng lệnh và luôn được thêm vào trước danh sách đối số không phải là lựa chọn rõ ràng.
--config
Ngoài việc đặt các giá trị mặc định cho lựa chọn, bạn có thể dùng tệp rc để 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 hậu tố :name
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ỉ đượ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 sang việc sử dụng startup
để đặt các lựa chọn khởi động. Chế độ cài đặt startup:config-name --some_startup_option
trong .bazelrc sẽ bị bỏ qua.
--enable_platform_specific_config
Bạn có thể tự động bật các cấu hình dành riêng cho nền tảng trong .bazelrc
bằng cách sử dụng --enable_platform_specific_config
. Ví dụ: nếu hệ điều hành máy chủ là Linux và lệnh build
được chạy, thì cấu hình build:linux
sẽ tự động được bật. Các mã nhận dạng hệ điều hành được hỗ trợ là linux
, macos
, windows
, freebsd
và openbsd
. Việc bật cờ này tương đương với việc sử dụng --config=linux
trên Linux, --config=windows
trên Windows, v.v.
Xem --enable_platform_specific_config.
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 chi phối 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 xây 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 một dòng. Các mục này tương ứng với thư mục gốc của không gian làm việc.
Tệp bazelrc chung
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 tại
etc/bazel.bazelrc
. - Tệp rc của không gian làm việc nằm tại
$workspace/tools/bazel.rc
. - Tệp rc tại thư mục 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 bazelrc bằng cách truyền lựa chọn khởi động --ignore_all_rc_files
.