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 các bản dựng 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 tệp cấu hình, được gọi là
.bazelrc
.
Tệp .bazelrc
nằm ở đâu?
Bazel tìm kiếm các tệp cấu hình tuỳ chọn ở các vị trí sau,
theo thứ tự hiển thị dưới đây. Các tuỳ chọn được diễn giải theo thứ tự này, vì vậy
trong các tệp sau này có thể ghi đè giá trị từ tệp trước đó nếu
thì xung đột. Tất cả các tuỳ chọn kiểm soát việc tệp nào trong số này được tải 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 hệ thống, trừ phi có
--nosystem_rc
.Đường dẫn:
- Trên Linux/macOS/Unixes:
/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, 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 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/Unixes:
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 của bạn (bên cạnh thư mục 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 tại nhà, trừ phi có
--nohome_rc
.Đường dẫn:
- Trên Linux/macOS/Unixes:
$HOME/.bazelrc
- Trên Windows:
%USERPROFILE%\.bazelrc
nế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/Unixes:
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ả các--bazelrc
tiếp theo sẽ bị bỏ qua. Điều này rất hữu ích khi tắt tìm kiếm tệp rc của người dùng, chẳng hạn như trong bản phát hành bản dựng.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 tuỳ chọn này, Bazel tìm kiếm một bản phát hành dùng thử toàn cầu . Để biết thêm thông tin chi tiết, hãy xem mục Bazelrc toàn cầu.
Cú pháp và ngữ nghĩa .bazelrc
Giống như tất cả UNIX "rc" thì tệp .bazelrc
là tệp văn bản có đường kẻ
ngữ pháp. Các dòng và dòng trống bắt đầu bằng #
(nhận xét) sẽ bị bỏ qua. Một
dòng chứa một chuỗi các từ được sắp xếp theo quy tắc giống nhau
được quy tắc là vỏ 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: sử dụng các dòng này để tải
"rc" khác tệp. Để 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,
ghi import %workspace%/path/to/bazelrc
.
Sự khác biệt giữa import
và try-import
là Bazel không thành công nếu
Tệp của import
bị thiếu (hoặc không đọc được), nhưng đối với tệp try-import
thì không
.
Ưu tiên nhập:
- Các lựa chọn trong tệp đã nhập được ưu tiên so với các lựa chọn được chỉ định trước câu lệnh nhập.
- Các tùy chọn được chỉ định sau câu lệnh nhập sẽ được ưu tiên so với câu lệnh nhập trong tệp đã nhập.
- Lựa chọn trong các tệp được nhập sau sẽ được ưu tiên so với 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ị tuỳ chọn mặc định. Từ đầu tiên trên mỗi đường dẫn 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, đi trước lệnh và được mô tả trongbazel help startup_options
.common
: các tuỳ chọn sẽ áp dụng cho mọi lệnh Bazel hỗ trợ chúng. Nếu một lệnh không hỗ trợ tuỳ chọn được chỉ định theo cách này, thì sẽ bị bỏ qua miễn là tuỳ chọn đó hợp lệ 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 đã chỉ định, nhưng không hỗ trợ giá trị được chỉ định, thì việc đó sẽ không thành công.always
: các tuỳ chọn áp dụng cho mọi lệnh Bazel. Nếu một lệnh không hỗ trợ một tuỳ chọn được chỉ định theo cách này thì tuỳ chọn đó sẽ không thành công.command
: Lệnh Bazel, chẳng hạn nhưbuild
hoặcquery
mà các tuỳ chọn sẽ áp dụng. Những tuỳ chọn này cũng áp dụng cho tất cả lệnh kế thừa từ lệnh đã chỉ định. (Ví dụ:test
kế thừa từbuild
.)
Mỗi dòng này có thể được sử dụng 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ó "dao quân đội Thuỵ Sĩ" giao diện dòng lệnh, sẽ tìm 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_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ó 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 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ại-c dbg
, 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 tính cụ thể: các dòng để lệnh cụ thể đượ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, làm cho lệnh kế thừa cụ thể hơn lệnh cơ sở . Ví dụ:
test
kế thừa từ lệnhbuild
, nên tất cả cờbazel build
đều hợp lệ đối vớibazel test
, đồng thời mọi dòngbuild
cũng áp dụng chobazel test
trừ phi có dòngtest
cho cùng một tuỳ chọn. Nếu rc tệp 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 đồ tính kế thừa (quy cách) 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 có độ cụ thể bằng nhau là đượ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 phù hợp với thứ tự tệp, nên quy tắc này sẽ giúp khả năng đọc nếu bạn tuân theo thứ tự ưu tiên trong các tệp rc: bắt đầu bằng
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ẽ là giống như thứ tự áp dụng các yếu tố đó, nên trực quan 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ố là chứ không phải các tuỳ chọn, chẳng hạn như tên của mục tiêu bản dựng, v.v. Các đề xuất này, chẳng hạn như các tuỳ chọn được chỉ định trong cùng tệp, có mức độ ưu tiên thấp hơn các tuỳ chọn đồng cấp trên dòng lệnh và luôn được thêm vào trước danh sách rõ ràng các chỉ số đối số tùy chọn.
--config
Ngoài các chế độ cài đặt mặc định cho chế độ cài đặt, tệp rc có thể được dùng để nhóm các lựa chọn
và cung cấp cách viết tắt cho các nhóm chung. Bạn có thể thực hiện việc này bằng cách thêm một :name
hậu tố vào lệnh. Các tuỳ chọn này sẽ bị bỏ qua theo mặc định, nhưng sẽ được
được đưa vào khi có tuỳ chọn --config=name
,
trên dòng lệnh hoặc trong tệp .bazelrc
, theo đệ 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ỉ là
được mở rộng cho các lệnh thích hợp, theo thứ tự ưu tiên được mô tả ở trên.
--config=foo
mở rộng sang các tuỳ chọn được xác định trong
các tệp rc "tại chỗ" để các tùy chọn
được chỉ định cho cấu hình có cùng mức độ ưu tiên với lựa chọn --config=foo
đã có.
Cú pháp này không bao gồm việc sử dụng startup
để đặt
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 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 có 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
.bazelignore
ở gốc không gian làm việc
và thêm các thư mục mà bạn muốn Bazel bỏ qua, mỗi thư mục một
. 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 nằm tại
$workspace/tools/bazel.rc
. - Tệp RC-của trang chủ đặt tại
$HOME/.bazelrc
Mỗi tệp bazelrc được liệt kê ở đây có một cờ tương ứng có thể dùng để
tắt chúng (ví dụ: --nosystem_rc
, --noworkspace_rc
, --nohome_rc
). Bạn có thể
cũng làm cho Bazel bỏ qua tất cả bazelrcs bằng cách truyền --ignore_all_rc_files
tùy chọn khởi động.