Bazel chấp nhận nhiều lựa chọn. Một số tuỳ chọn thay đổi thường xuyên (ví dụ: --subcommands
) trong khi một số tuỳ chọn khác vẫn giữ nguyên trên một số bản dựng (chẳng hạn như --package_path
). Để tránh chỉ định các tuỳ 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 tuỳ 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 ở các vị trí sau, theo thứ tự hiển thị bên dưới. Các tùy chọn được diễn giải theo thứ tự này, vì vậy,
các tùy chọn trong các tệp sau này có thể ghi đè giá trị từ tệp trước đó nếu
xảy ra xung đột. Tất cả các tuỳ chọn kiểm soát tệp nào trong số này được tải đều là tuỳ chọn khởi động, nghĩa là các tuỳ chọn này phải xảy ra sau bazel
và trước lệnh (build
, test
, v.v.).
Tệp RC của 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 tệp 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:
.bazelrc
trong thư mục không gian làm việc (bên cạnh tệpWORKSPACE
chính).Đây không phải là lỗi nếu tệp này không tồn tạ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%\.bazelrc
nếu có hoặc%HOME%/.bazelrc
Đây không phải là lỗi nếu tệp này không tồn tạ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 là không bắt buộc nhưng cũng có thể được chỉ định nhiều lần.
/dev/null
cho biết tất cả--bazelrc
khác sẽ bị bỏ qua. Điều này rất 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 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 sẽ tìm tệp rc chung. Để biết thêm thông tin, hãy xem phần bazelrc chung.
Cú pháp và ngữ nghĩa .bazelrc
Giống như mọi tệp "rc" UNIX, tệp .bazelrc
là 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 giống như shell Bourne.
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 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ẽ không thành công 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
.
Thứ tự ưu tiên nhập:
- Các tuỳ chọn trong tệp đã nhập được ưu tiên hơn các tuỳ chọn được chỉ định trước lệnh nhập.
- Các tuỳ chọn được chỉ định sau câu lệnh nhập sẽ được ưu tiên so với các tuỳ chọn trong tệp đã nhập.
- Các tuỳ chọn trong tệp được nhập sau sẽ được ưu tiên hơn so với 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 tệp bazelrc xác định giá trị tuỳ 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 tuỳ chọn khởi động, nằm trước lệnh và được mô tả trongbazel help startup_options
.common
: các tuỳ chọn áp dụng cho tất cả lệnh Bazel.command
: Lệnh Bazel, chẳng hạn nhưbuild
hoặcquery
mà các tuỳ chọn áp dụng. Các tuỳ chọn này cũng áp dụng cho tất cả lệnh kế thừa từ lệnh được chỉ định. (Ví dụ:test
kế 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 "Swiss army knife", sẽ thấy cú pháp tương tự như .cvsrc
.) Ví dụ: các dòng:
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
được kết hợp thành:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
vì vậy, các cờ hiệu quả là --verbose_failures
và --test_tmpdir=/tmp/bar
.
Thứ tự ưu tiên của tuỳ chọn:
- Các tuỳ chọn trên dòng lệnh luôn được ưu tiên hơn các tuỳ chọn trong tệp rc.
Ví dụ: nếu tệp rc cho biết
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 chịu sự điều chỉnh của mức độ cụ thể: các dòng cho 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.
Tính cụ thể được xác định theo tính kế thừa. Một số lệnh kế thừa các tuỳ chọn từ các lệnh khác, khiến lệnh kế thừa trở nên 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ệ vớibazel test
và tất cả các dòngbuild
cũng áp dụng chobazel test
trừ phi có một dòngtest
cho cùng tuỳ 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ẽ sử dụng-c opt --verbose_failures
vàbazel test //foo
sẽ sử dụng--verbose_failures -c dbg --test_env=PATH
.Biểu đồ kế thừa (độ đặc trưng) là:
- Mọi lệnh đều kế thừa từ
common
- Các lệnh sau kế thừa từ (và cụ thể hơn)
build
:test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
vàaquery
coverage
kế thừa từtest
- Mọi lệnh đều kế thừa từ
Hai dòng chỉ định các tuỳ chọn cho cùng một lệnh ở mức độ cụ thể như 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 tệp rc để dễ đọc: bắt đầu bằng các tuỳ 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 tuỳ chọn sẽ giống với thứ tự áp dụng các tuỳ 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à tuỳ chọn, chẳng hạn như tên của mục tiêu bản dựng, v.v. Các đối số này, giống như các tuỳ chọn được chỉ định trong cùng một tệp, có mức độ ưu tiên thấp hơn các đối số đồng cấp trên dòng lệnh và luôn được thêm vào đầu danh sách rõ ràng của các đối số không phải tuỳ chọn.
--config
Ngoài việc đặt các tuỳ chọn mặc định, tệp rc còn có thể được dùng để nhóm các tuỳ chọn và cung cấp 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. Các tuỳ chọn này bị bỏ qua theo mặc định, nhưng sẽ được đưa vào khi có tuỳ chọn --config=name
, trên dòng lệnh hoặc trong tệp .bazelrc
, đệ quy, ngay cả bên trong định nghĩa cấu hình khác. Các tuỳ chọn do command:name
chỉ định sẽ chỉ được mở rộng cho các lệnh hiện hành, theo thứ tự ưu tiên mô tả ở trên.
--config=foo
mở rộng thành các tuỳ chọn được xác định trong tệp rc "tại chỗ" để các tuỳ chọn được chỉ định cho cấu hình có cùng mức độ ưu tiên với tuỳ chọn --config=foo
.
Cú pháp này không mở rộng đến việc sử dụng startup
để đặt
các tuỳ chọn khởi động. Chế độ cài đặt startup:config-name --some_startup_option
trong miền .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 xây dựng khác. Đặt một tệp có tên là .bazelignore
ở gốc không gian làm việc rồi thêm các thư mục mà bạn muốn Bazel bỏ qua, mỗi thư mục một dòng. Các mục nhập liên quan đến thư mục gốc của không gian làm việc.
Tệp bazelrc toàn cục
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 Workspace đặt tại $workspace/tools/bazel.rc
.
– Tệp rc-home được lưu tại $HOME/.bazelrc
Mỗi tệp bazelrc liệt kê ở đây đều có một cờ tương ứng để vô hiệu hoá 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 bazelrcs bằng cách chuyển tuỳ chọn khởi động --ignore_all_rc_files
.