Trang này trình bày các lựa chọn có sẵn với nhiều lệnh Bazel, chẳng hạn như bazel build
, bazel run
và bazel test
. Trang này là trang bổ trợ cho danh sách các lệnh của Bazel trong phần Xây dựng bằng Bazel.
Cú pháp mục tiêu
Một số lệnh, chẳng hạn như build
hoặc test
, có thể hoạt động trên danh sách mục tiêu. Chúng sử dụng cú pháp linh hoạt hơn nhãn, được ghi lại trong phần Chỉ định mục tiêu để tạo.
Tùy chọn
Các phần sau đây mô tả các lựa chọn có sẵn trong quá trình tạo. Khi --long
được dùng cho một lệnh trợ giúp, các thông báo trợ giúp trực tuyến sẽ cung cấp thông tin tóm tắt về ý nghĩa, loại và giá trị mặc định cho từng lựa chọn.
Hầu hết các lựa chọn chỉ có thể được chỉ định một lần. Khi được chỉ định nhiều lần, phiên bản cuối cùng sẽ được ưu tiên. Những lựa chọn có thể được chỉ định nhiều lần sẽ được xác định trong phần trợ giúp trực tuyến bằng văn bản "có thể được sử dụng nhiều lần".
Vị trí gói hàng
--package_path
CẢNH BÁO: Tuỳ chọn --package_path
không được dùng nữa. Bazel ưu tiên các gói trong kho lưu trữ chính nằm dưới thư mục gốc của không gian làm việc.
Tuỳ chọn này chỉ định tập hợp các thư mục được tìm kiếm để tìm tệp BUILD cho một gói nhất định.
Bazel tìm các gói bằng cách tìm kiếm đường dẫn gói. Đây là danh sách có thứ tự gồm các thư mục bazel được phân tách bằng dấu hai chấm, mỗi thư mục là gốc của một cây nguồn một phần.
Để chỉ định một đường dẫn gói tuỳ chỉnh bằng cách sử dụng tuỳ chọn --package_path
:
% bazel build --package_path %workspace%:/some/other/root
Bạn có thể chỉ định các phần tử đường dẫn gói theo 3 định dạng:
- Nếu ký tự đầu tiên là
/
, thì đường dẫn là đường dẫn tuyệt đối. - Nếu đường dẫn bắt đầu bằng
%workspace%
, thì đường dẫn sẽ được lấy tương ứng với thư mục bazel bao quanh gần nhất. Ví dụ: nếu thư mục làm việc của bạn là/home/bob/clients/bob_client/bazel/foo
, thì chuỗi%workspace%
trong đường dẫn gói sẽ được mở rộng thành/home/bob/clients/bob_client/bazel
. - Mọi thứ khác đều được lấy tương ứng với thư mục đang hoạt động.
Đây thường không phải là điều bạn muốn làm và có thể hoạt động không như mong đợi nếu bạn sử dụng Bazel từ các thư mục bên dưới không gian làm việc Bazel.
Ví dụ: nếu bạn sử dụng phần tử package-path
.
, rồi cd vào thư mục/home/bob/clients/bob_client/bazel/foo
, các gói sẽ được phân giải từ thư mục/home/bob/clients/bob_client/bazel/foo
.
Nếu bạn sử dụng đường dẫn gói không mặc định, hãy chỉ định đường dẫn đó trong tệp cấu hình Bazel để thuận tiện.
Bazel không yêu cầu bất kỳ gói nào phải nằm trong thư mục hiện tại, vì vậy, bạn có thể tạo bản dựng từ một không gian làm việc bazel trống nếu tất cả các gói cần thiết có thể được tìm thấy ở nơi khác trên đường dẫn gói.
Ví dụ: Xây dựng từ một ứng dụng trống
% mkdir -p foo/bazel % cd foo/bazel % touch MODULE.bazel % bazel build --package_path /some/other/path //foo
--deleted_packages
Tuỳ chọn này chỉ định một danh sách các gói được phân tách bằng dấu phẩy mà Bazel nên coi là đã bị xoá và không cố gắng tải từ bất kỳ thư mục nào trên đường dẫn gói. Bạn có thể dùng lệnh này để mô phỏng việc xoá các gói mà không thực sự xoá chúng. Bạn có thể truyền lựa chọn này nhiều lần, trong trường hợp đó, các danh sách riêng lẻ sẽ được nối với nhau.
Kiểm tra lỗi
Các lựa chọn này kiểm soát việc kiểm tra lỗi và/hoặc cảnh báo của Bazel.
--[no]check_visibility
Nếu bạn đặt lựa chọn này thành false, các bước kiểm tra khả năng hiển thị sẽ bị hạ cấp thành cảnh báo. Giá trị mặc định của lựa chọn này là true, do đó, theo mặc định, hệ thống sẽ kiểm tra khả năng hiển thị.
--output_filter=regex
Tuỳ chọn --output_filter
sẽ chỉ cho thấy các cảnh báo về bản dựng và quá trình biên dịch cho những mục tiêu khớp với biểu thức chính quy. Nếu một mục tiêu không khớp với biểu thức chính quy đã cho và quá trình thực thi của mục tiêu đó thành công, thì đầu ra chuẩn và lỗi chuẩn của mục tiêu đó sẽ bị loại bỏ.
Dưới đây là một số giá trị điển hình cho lựa chọn này:
`--output_filter='^//(first/project|second/project):'` | Hiện đầu ra cho các gói đã chỉ định. |
`--output_filter='^//((?!(first/bad_project|second/bad_project):).)*$'` | Không hiện đầu ra cho các gói đã chỉ định. |
`--output_filter=` | Hiện tất cả. |
`--output_filter=DONT_MATCH_ANYTHING` | Không hiển thị gì. |
Cờ công cụ
Các lựa chọn này kiểm soát những lựa chọn mà Bazel sẽ truyền đến các công cụ khác.
--copt=cc-option
Tuỳ chọn này nhận một đối số sẽ được truyền đến trình biên dịch. Đối số sẽ được truyền đến trình biên dịch bất cứ khi nào trình biên dịch được gọi để tiền xử lý, biên dịch và/hoặc hợp ngữ mã C, C++ hoặc hợp ngữ. Tham số này sẽ không được truyền khi liên kết.
Bạn có thể sử dụng lựa chọn này nhiều lần. Ví dụ:
% bazel build --copt="-g0" --copt="-fpic" //foo
sẽ biên dịch thư viện foo
mà không có bảng gỡ lỗi, tạo mã độc lập với vị trí.
--host_copt=cc-option
Tuỳ chọn này nhận một đối số sẽ được truyền đến trình biên dịch cho các tệp nguồn được biên dịch trong cấu hình exec. Điều này tương tự như lựa chọn --copt
, nhưng chỉ áp dụng cho cấu hình exec.
--host_conlyopt=cc-option
Tuỳ chọn này nhận một đối số sẽ được truyền đến trình biên dịch cho các tệp nguồn C được biên dịch trong cấu hình exec. Điều này tương tự như lựa chọn --conlyopt
, nhưng chỉ áp dụng cho cấu hình exec.
--host_cxxopt=cc-option
Lựa chọn này nhận một đối số sẽ được truyền đến trình biên dịch cho các tệp nguồn C++ được biên dịch trong cấu hình exec. Điều này tương tự như lựa chọn --cxxopt
, nhưng chỉ áp dụng cho cấu hình exec.
--host_linkopt=linker-option
Tuỳ chọn này nhận một đối số sẽ được truyền đến trình liên kết cho các tệp nguồn được biên dịch trong cấu hình exec. Điều này tương tự như lựa chọn --linkopt
, nhưng chỉ áp dụng cho cấu hình exec.
--conlyopt=cc-option
Tuỳ chọn này nhận một đối số sẽ được truyền đến trình biên dịch khi biên dịch các tệp nguồn C.
Điều này tương tự như --copt
, nhưng chỉ áp dụng cho quá trình biên dịch C, không áp dụng cho quá trình biên dịch hoặc liên kết C++. Vì vậy, bạn có thể truyền các lựa chọn dành riêng cho C (chẳng hạn như -Wno-pointer-sign
) bằng cách sử dụng --conlyopt
.
--cxxopt=cc-option
Tuỳ chọn này nhận một đối số sẽ được truyền đến trình biên dịch khi biên dịch các tệp nguồn C++.
Điều này tương tự như --copt
, nhưng chỉ áp dụng cho quá trình biên dịch C++, không áp dụng cho quá trình biên dịch hoặc liên kết C. Vì vậy, bạn có thể truyền các lựa chọn dành riêng cho C++ (chẳng hạn như -fpermissive
hoặc -fno-implicit-templates
) bằng cách sử dụng --cxxopt
.
Ví dụ:
% bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code
--linkopt=linker-option
Lựa chọn này nhận một đối số sẽ được truyền đến trình biên dịch khi liên kết.
Điều này tương tự như --copt
, nhưng chỉ áp dụng cho việc liên kết, chứ không áp dụng cho việc biên dịch. Vì vậy, bạn có thể truyền các lựa chọn của trình biên dịch chỉ có ý nghĩa tại thời điểm liên kết (chẳng hạn như -lssp
hoặc -Wl,--wrap,abort
) bằng cách sử dụng --linkopt
. Ví dụ:
% bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code
Các quy tắc xây dựng cũng có thể chỉ định các lựa chọn liên kết trong thuộc tính của chúng. Các chế độ cài đặt của lựa chọn này luôn được ưu tiên. Xem thêm cc_library.linkopts.
--strip (always|never|sometimes)
Lựa chọn này xác định xem Bazel có xoá thông tin gỡ lỗi khỏi tất cả các tệp nhị phân và thư viện dùng chung hay không, bằng cách gọi trình liên kết bằng lựa chọn -Wl,--strip-debug
.
--strip=always
có nghĩa là luôn loại bỏ thông tin gỡ lỗi.
--strip=never
có nghĩa là không bao giờ loại bỏ thông tin gỡ lỗi.
Giá trị mặc định của --strip=sometimes
có nghĩa là xoá nếu --compilation_mode
là fastbuild
.
% bazel build --strip=always //foo:bar
sẽ biên dịch mục tiêu trong khi loại bỏ thông tin gỡ lỗi khỏi tất cả các tệp nhị phân đã tạo.
Tuỳ chọn --strip
của Bazel tương ứng với tuỳ chọn --strip-debug
của ld: tuỳ chọn này chỉ loại bỏ thông tin gỡ lỗi. Nếu vì lý do nào đó mà bạn muốn xoá tất cả các biểu tượng, chứ không chỉ các biểu tượng gỡ lỗi, thì bạn cần sử dụng lựa chọn --strip-all
của ld. Bạn có thể làm việc này bằng cách truyền --linkopt=-Wl,--strip-all
đến Bazel. Ngoài ra, hãy lưu ý rằng việc đặt cờ --strip
của Bazel sẽ ghi đè --linkopt=-Wl,--strip-all
, vì vậy, bạn chỉ nên đặt một trong hai cờ này.
Nếu chỉ tạo một tệp nhị phân và muốn xoá tất cả các biểu tượng, bạn cũng có thể truyền --stripopt=--strip-all
và tạo rõ ràng phiên bản //foo:bar.stripped
của mục tiêu. Như mô tả trong phần về --stripopt
, thao tác này sẽ áp dụng một thao tác loại bỏ sau khi tệp nhị phân cuối cùng được liên kết thay vì đưa thao tác loại bỏ vào tất cả các thao tác liên kết của bản dựng.
--stripopt=strip-option
Đây là một lựa chọn bổ sung để truyền đến lệnh strip
khi tạo tệp nhị phân *.stripped
. Giá trị mặc định là -S -p
. Bạn có thể sử dụng lựa chọn này nhiều lần.
--fdo_instrument=profile-output-dir
Lựa chọn --fdo_instrument
cho phép tạo đầu ra hồ sơ FDO (tối ưu hoá dựa trên phản hồi) khi thực thi tệp nhị phân C/C++ đã tạo. Đối với GCC, đối số được cung cấp sẽ được dùng làm tiền tố thư mục cho cây thư mục tệp theo đối tượng của các tệp .gcda chứa thông tin hồ sơ cho mỗi tệp .o.
Sau khi tạo cây dữ liệu hồ sơ, bạn nên nén cây hồ sơ và cung cấp cho lựa chọn --fdo_optimize=profile-zip
Bazel để bật quá trình biên dịch được tối ưu hoá FDO.
Đối với trình biên dịch LLVM, đối số này cũng là thư mục mà(các) tệp dữ liệu hồ sơ LLVM thô được kết xuất. Ví dụ:--fdo_instrument=/path/to/rawprof/dir/
.
Bạn không thể dùng đồng thời các lựa chọn --fdo_instrument
và --fdo_optimize
.
--fdo_optimize=profile-zip
Tuỳ chọn --fdo_optimize
cho phép sử dụng thông tin hồ sơ của từng tệp đối tượng để thực hiện các hoạt động tối ưu hoá FDO (tối ưu hoá theo hướng dẫn của thông tin phản hồi) khi biên dịch. Đối với GCC, đối số được cung cấp là tệp zip chứa cây tệp đã tạo trước đó của các tệp .gcda chứa thông tin hồ sơ cho từng tệp .o.
Ngoài ra, đối số được cung cấp có thể trỏ đến một hồ sơ tự động do tiện ích .afdo xác định.
Đối với trình biên dịch LLVM, đối số được cung cấp phải trỏ đến tệp đầu ra hồ sơ LLVM được lập chỉ mục do công cụ llvm-profdata chuẩn bị và phải có đuôi .profdata.
Bạn không thể dùng đồng thời các lựa chọn --fdo_instrument
và --fdo_optimize
.
--java_language_version=version
Tuỳ chọn này chỉ định phiên bản của các nguồn Java. Ví dụ:
% bazel build --java_language_version=8 java/com/example/common/foo:all
biên dịch và chỉ cho phép các cấu trúc tương thích với thông số kỹ thuật Java 8.
Giá trị mặc định là 11. -->
Các giá trị có thể là: 8, 9, 10, 11, 17 và 21, đồng thời có thể được mở rộng bằng cách đăng ký các chuỗi công cụ Java tuỳ chỉnh bằng default_java_toolchain
.
--tool_java_language_version=version
Phiên bản ngôn ngữ Java được dùng để tạo các công cụ sẽ được thực thi trong quá trình tạo bản dựng. Giá trị mặc định là 11.
--java_runtime_version=version
Tuỳ chọn này chỉ định phiên bản JVM sẽ dùng để thực thi mã và chạy các kiểm thử. Ví dụ:
% bazel run --java_runtime_version=remotejdk_11 java/com/example/common/foo:java_application
tải JDK 11 xuống từ một kho lưu trữ từ xa và chạy ứng dụng Java bằng JDK 11.
Giá trị mặc định là local_jdk
.
Các giá trị có thể có là: local_jdk
, local_jdk_version
, remotejdk_11
, remotejdk_17
và remotejdk_21
.
Bạn có thể mở rộng các giá trị bằng cách đăng ký JVM tuỳ chỉnh bằng cách sử dụng các quy tắc kho lưu trữ local_java_repository
hoặc remote_java_repository
.
--tool_java_runtime_version=version
Phiên bản JVM được dùng để thực thi các công cụ cần thiết trong quá trình tạo bản dựng.
Giá trị mặc định là remotejdk_11
.
--jvmopt=jvm-option
Tuỳ chọn này cho phép truyền các đối số tuỳ chọn đến máy ảo Java. Bạn có thể dùng một đối số lớn hoặc nhiều lần với các đối số riêng lẻ. Ví dụ:
% bazel build --jvmopt="-server -Xms256m" java/com/example/common/foo:all
sẽ sử dụng VM máy chủ để chạy tất cả các tệp nhị phân Java và đặt kích thước vùng nhớ khối xếp khởi động cho VM thành 256 MB.
--javacopt=javac-option
Tuỳ chọn này cho phép truyền các đối số tuỳ chọn đến javac. Bạn có thể dùng một đối số lớn hoặc nhiều lần với các đối số riêng lẻ. Ví dụ:
% bazel build --javacopt="-g:source,lines" //myprojects:prog
sẽ tạo lại java_binary bằng thông tin gỡ lỗi mặc định của javac (thay vì thông tin mặc định của bazel).
Lựa chọn này được truyền đến javac sau các lựa chọn mặc định tích hợp của Bazel cho javac và trước các lựa chọn theo quy tắc. Thông số kỹ thuật cuối cùng của mọi lựa chọn cho javac sẽ thắng. Các lựa chọn mặc định cho javac là:
-source 8 -target 8 -encoding UTF-8
--strict_java_deps (default|strict|off|warn|error)
Tuỳ chọn này kiểm soát việc javac có kiểm tra các phần phụ thuộc trực tiếp bị thiếu hay không. Các mục tiêu Java phải khai báo rõ ràng tất cả các mục tiêu được sử dụng trực tiếp dưới dạng các phần phụ thuộc. Cờ này hướng dẫn javac xác định các jar thực sự được dùng để kiểm tra loại cho từng tệp java và cảnh báo/gây lỗi nếu chúng không phải là đầu ra của một phần phụ thuộc trực tiếp của mục tiêu hiện tại.
off
có nghĩa là tính năng kiểm tra đã bị tắt.warn
có nghĩa là javac sẽ tạo cảnh báo java tiêu chuẩn thuộc loại[strict]
cho mỗi phần phụ thuộc trực tiếp bị thiếu.default
,strict
vàerror
đều có nghĩa là javac sẽ tạo ra lỗi thay vì cảnh báo, khiến mục tiêu hiện tại không thể tạo nếu tìm thấy bất kỳ phần phụ thuộc trực tiếp nào bị thiếu. Đây cũng là hành vi mặc định khi cờ không được chỉ định.
Xây dựng ngữ nghĩa
Các lựa chọn này ảnh hưởng đến lệnh tạo và/hoặc nội dung tệp đầu ra.
--compilation_mode (fastbuild|opt|dbg)
(-c)
Lựa chọn --compilation_mode
(thường được rút ngắn thành -c
, đặc biệt là -c opt
) nhận một đối số là fastbuild
, dbg
hoặc opt
và ảnh hưởng đến nhiều lựa chọn tạo mã C/C++, chẳng hạn như mức độ tối ưu hoá và tính hoàn chỉnh của các bảng gỡ lỗi. Bazel sử dụng một thư mục đầu ra khác cho mỗi chế độ biên dịch khác nhau, vì vậy, bạn có thể chuyển đổi giữa các chế độ mà không cần phải thực hiện quy trình tạo lại hoàn toàn mỗi lần.
fastbuild
có nghĩa là tạo bản dựng nhanh nhất có thể: tạo thông tin gỡ lỗi tối thiểu (-gmlt -Wl,-S
) và không tối ưu hoá. Đây là lựa chọn mặc định. Lưu ý:-DNDEBUG
sẽ không được đặt.dbg
có nghĩa là bản dựng đã bật tính năng gỡ lỗi (-g
), nhờ đó bạn có thể sử dụng gdb (hoặc một trình gỡ lỗi khác).opt
có nghĩa là bản dựng đã bật tính năng tối ưu hoá và đã tắt các lệnh gọiassert()
(-O2 -DNDEBUG
). Thông tin gỡ lỗi sẽ không được tạo ở chế độopt
, trừ phi bạn cũng truyền--copt -g
.
--cpu=cpu
Tuỳ chọn này chỉ định cấu trúc CPU mục tiêu sẽ được dùng để biên dịch các tệp nhị phân trong quá trình tạo.
--action_env=VAR=VALUE
Chỉ định tập hợp các biến môi trường có sẵn trong quá trình thực thi tất cả các hành động.
Bạn có thể chỉ định các biến theo tên. Trong trường hợp này, giá trị sẽ được lấy từ môi trường gọi hoặc theo cặp name=value
đặt giá trị độc lập với môi trường gọi.
Bạn có thể chỉ định cờ --action_env
này nhiều lần. Nếu một giá trị được chỉ định cho cùng một biến trên nhiều cờ --action_env
, thì chỉ định mới nhất sẽ được ưu tiên.
--experimental_action_listener=label
Lựa chọn experimental_action_listener
hướng dẫn Bazel sử dụng thông tin chi tiết từ quy tắc action_listener
do label chỉ định để chèn extra_actions
vào biểu đồ bản dựng.
--[no]experimental_extra_action_top_level_only
Nếu bạn đặt tuỳ chọn này thành true, thì các thao tác bổ sung do tuỳ chọn dòng lệnh --experimental_action_listener
chỉ định sẽ chỉ được lên lịch cho các mục tiêu cấp cao nhất.
--experimental_extra_action_filter=regex
Lựa chọn experimental_extra_action_filter
hướng dẫn Bazel lọc tập hợp các mục tiêu để lên lịch extra_actions
.
Cờ này chỉ áp dụng khi kết hợp với cờ --experimental_action_listener
.
Theo mặc định, tất cả extra_actions
trong bao đóng bắc cầu của các mục tiêu cần tạo được lên lịch thực thi.
--experimental_extra_action_filter
sẽ hạn chế việc lên lịch cho extra_actions
mà nhãn của chủ sở hữu khớp với biểu thức chính quy đã chỉ định.
Ví dụ sau đây sẽ giới hạn việc lập lịch extra_actions
chỉ áp dụng cho những hành động mà nhãn của chủ sở hữu có chứa "/bar/":
% bazel build --experimental_action_listener=//test:al //foo/... \ --experimental_extra_action_filter=.*/bar/.*
--host_cpu=cpu
Tuỳ chọn này chỉ định tên của cấu trúc CPU cần dùng để tạo các công cụ lưu trữ.
--android_platforms=platform[,platform]*
Các nền tảng để tạo deps
bắc cầu của các quy tắc android_binary
(cụ thể là cho các phần phụ thuộc gốc như C++). Ví dụ: nếu cc_library
xuất hiện trong deps
bắc cầu của một quy tắc android_binary
, thì quy tắc đó sẽ được tạo một lần cho mỗi nền tảng được chỉ định bằng --android_platforms
cho quy tắc android_binary
và được đưa vào đầu ra cuối cùng.
Không có giá trị mặc định cho cờ này: bạn phải xác định và sử dụng một nền tảng Android tuỳ chỉnh.
Một tệp .so
được tạo và đóng gói trong APK cho mỗi nền tảng được chỉ định bằng --android_platforms
. Tên của tệp .so
sẽ có tiền tố "lib" trước tên của quy tắc android_binary
. Ví dụ: nếu tên của android_binary
là "foo" thì tệp sẽ là libfoo.so
.
--per_file_copt=[+-]regex[,[+-]regex]...@option[,option]...
Khi có mặt, mọi tệp C++ có nhãn hoặc đường dẫn thực thi khớp với một trong các biểu thức regex bao gồm và không khớp với bất kỳ biểu thức loại trừ nào sẽ được tạo bằng các lựa chọn đã cho. Hoạt động so khớp nhãn sử dụng dạng chính tắc của nhãn (tức là //package
:label_name
).
Đường dẫn thực thi là đường dẫn tương đối đến thư mục không gian làm việc của bạn, bao gồm cả tên cơ sở (kể cả đuôi) của tệp C++. Đường dẫn này cũng bao gồm mọi tiền tố phụ thuộc vào nền tảng.
Để so khớp các tệp được tạo (chẳng hạn như đầu ra genrule), Bazel chỉ có thể sử dụng đường dẫn thực thi. Trong trường hợp này, biểu thức chính quy không được bắt đầu bằng "//" vì biểu thức đó không khớp với bất kỳ đường dẫn thực thi nào. Bạn có thể sử dụng tên gói như sau: --per_file_copt=base/.*\.pb\.cc@-g0
. Thao tác này sẽ khớp với mọi tệp .pb.cc
trong thư mục có tên là base
.
Bạn có thể sử dụng lựa chọn này nhiều lần.
Tuỳ chọn này được áp dụng bất kể chế độ biên dịch nào được dùng. Ví dụ: bạn có thể biên dịch bằng --compilation_mode=opt
và chọn lọc biên dịch một số tệp khi bật chế độ tối ưu hoá mạnh hơn hoặc khi tắt chế độ tối ưu hoá.
Lưu ý: Nếu một số tệp được biên dịch có chọn lọc bằng biểu tượng gỡ lỗi, thì các biểu tượng có thể bị loại bỏ trong quá trình liên kết. Bạn có thể ngăn chặn điều này bằng cách thiết lập --strip=never
.
Cú pháp: [+-]regex[,[+-]regex]...@option[,option]...
Trong đó, regex
là một biểu thức chính quy có thể được thêm tiền tố bằng +
để xác định các mẫu bao gồm và bằng -
để xác định các mẫu loại trừ. option
là một tuỳ chọn tuỳ ý được truyền đến trình biên dịch C++. Nếu một lựa chọn chứa ,
, thì lựa chọn đó phải được đặt trong dấu ngoặc kép như sau \,
. Các lựa chọn cũng có thể chứa @
, vì chỉ @
đầu tiên được dùng để phân tách biểu thức chính quy với các lựa chọn.
Ví dụ: --per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs
sẽ thêm các lựa chọn -O0
và -fprofile-arcs
vào dòng lệnh của trình biên dịch C++ cho tất cả các tệp .cc
trong //foo/
, ngoại trừ file.cc
.
--dynamic_mode=mode
Xác định xem các tệp nhị phân C++ sẽ được liên kết một cách linh động, tương tác với thuộc tính linkstatic trên các quy tắc xây dựng hay không.
Chế độ:
default
: Cho phép bazel chọn có liên kết một cách linh động hay không. Hãy xem linkstatic để biết thêm thông tin.fully
: Liên kết tất cả các mục tiêu một cách linh hoạt. Điều này sẽ tăng tốc thời gian liên kết và giảm kích thước của các tệp nhị phân kết quả.off
: Liên kết tất cả các mục tiêu ở chế độ chủ yếu là tĩnh. Nếu-static
được đặt trong linkopts, thì các mục tiêu sẽ thay đổi thành hoàn toàn tĩnh.
--fission (yes|no|[dbg][,opt][,fastbuild])
Cho phép Fission ghi thông tin gỡ lỗi C++ vào các tệp .dwo chuyên dụng thay vì tệp .o, nếu không thì thông tin này sẽ được ghi vào tệp .o. Điều này giúp giảm đáng kể kích thước đầu vào cho các đường liên kết và có thể giảm thời gian liên kết.
Khi được đặt thành [dbg][,opt][,fastbuild]
(ví dụ: --fission=dbg,fastbuild
), Fission chỉ được bật cho nhóm chế độ biên dịch được chỉ định. Điều này hữu ích cho các chế độ cài đặt bazelrc. Khi được đặt thành yes
, Fission sẽ được bật trên toàn cầu. Khi được đặt thành no
, Fission sẽ bị tắt trên toàn cầu. Giá trị mặc định là no
.
--force_ignore_dash_static
Nếu cờ này được đặt, mọi lựa chọn -static
trong linkopts của tệp BUILD theo quy tắc cc_*
sẽ bị bỏ qua. Đây chỉ là giải pháp tạm thời cho các bản dựng tăng cường bảo mật C++.
--[no]force_pic
Nếu được bật, tất cả các bản biên dịch C++ sẽ tạo ra mã độc lập với vị trí ("-fPIC"), các đường liên kết ưu tiên thư viện được tạo sẵn PIC hơn các thư viện không phải PIC và các đường liên kết tạo ra các tệp thực thi độc lập với vị trí ("-pie"). Theo mặc định, chế độ này bị tắt.
--android_resource_shrinking
Chọn có thực hiện việc giảm kích thước tài nguyên cho các quy tắc android_binary hay không. Đặt giá trị mặc định cho thuộc tính shrink_resources trên các quy tắc android_binary; hãy xem tài liệu về quy tắc đó để biết thêm thông tin chi tiết. Giá trị mặc định là tắt.
--custom_malloc=malloc-library-target
Khi được chỉ định, hãy luôn sử dụng phương thức triển khai malloc đã cho, ghi đè tất cả các thuộc tính malloc="target"
, kể cả trong những mục tiêu sử dụng mặc định (bằng cách không chỉ định bất kỳ malloc
nào).
--crosstool_top=label
Lựa chọn này chỉ định vị trí của bộ trình biên dịch crosstool sẽ được dùng cho tất cả quá trình biên dịch C++ trong quá trình tạo. Bazel sẽ tìm kiếm một tệp CROSSTOOL ở vị trí đó và dùng tệp đó để tự động xác định các chế độ cài đặt cho --compiler
.
--host_crosstool_top=label
Nếu không được chỉ định, Bazel sẽ sử dụng giá trị của --crosstool_top
để biên dịch mã trong cấu hình thực thi, chẳng hạn như các công cụ chạy trong quá trình tạo. Mục đích chính của cờ này là cho phép biên dịch chéo.
--apple_crosstool_top=label
Crosstool dùng để biên dịch các quy tắc C/C++ trong deps
bắc cầu của các quy tắc objc*, ios* và apple*. Đối với những mục tiêu đó, cờ này sẽ ghi đè --crosstool_top
.
--compiler=version
Lựa chọn này chỉ định phiên bản trình biên dịch C/C++ (chẳng hạn như gcc-4.1.0
) sẽ được dùng để biên dịch các tệp nhị phân trong quá trình tạo. Nếu muốn tạo bằng crosstool tuỳ chỉnh, bạn nên sử dụng tệp CROSSTOOL thay vì chỉ định cờ này.
--android_sdk=label
Không dùng nữa. Bạn không nên chỉ định trực tiếp giá trị này.
Lựa chọn này chỉ định chuỗi công cụ SDK/nền tảng Android và thư viện thời gian chạy Android sẽ được dùng để tạo mọi quy tắc liên quan đến Android.
SDK Android sẽ được tự động chọn nếu bạn xác định một quy tắc android_sdk_repository
trong tệp WORKSPACE.
--java_toolchain=label
Không có thao tác. Chỉ giữ lại để đảm bảo khả năng tương thích ngược.
--host_java_toolchain=label
Không có thao tác. Chỉ giữ lại để đảm bảo khả năng tương thích ngược.
--javabase=(label)
Không có thao tác. Chỉ giữ lại để đảm bảo khả năng tương thích ngược.
--host_javabase=label
Không có thao tác. Chỉ giữ lại để đảm bảo khả năng tương thích ngược.
Chiến lược thực thi
Các lựa chọn này ảnh hưởng đến cách Bazel thực thi bản dựng. Chúng sẽ không ảnh hưởng đáng kể đến các tệp đầu ra do bản dựng tạo ra. Thông thường, hiệu ứng chính của các công trình này là tăng tốc độ xây dựng.
--spawn_strategy=strategy
Tuỳ chọn này kiểm soát vị trí và cách thức thực thi các lệnh.
standalone
khiến các lệnh được thực thi dưới dạng các quy trình con cục bộ. Giá trị này không được dùng nữa. Thay vào đó, hãy sử dụnglocal
.sandboxed
khiến các lệnh được thực thi trong một hộp cát trên máy cục bộ. Điều này đòi hỏi bạn phải liệt kê tất cả các tệp đầu vào, phần phụ thuộc dữ liệu và công cụ dưới dạng phần phụ thuộc trực tiếp trong các thuộc tínhsrcs
,data
vàtools
. Theo mặc định, Bazel cho phép tạo hộp cát cục bộ trên những hệ thống hỗ trợ thực thi trong hộp cát.local
khiến các lệnh được thực thi dưới dạng các quy trình con cục bộ.worker
khiến các lệnh được thực thi bằng một trình chạy liên tục (nếu có).docker
khiến các lệnh được thực thi bên trong hộp cát docker trên máy cục bộ. Bạn phải cài đặt docker.remote
khiến các lệnh được thực thi từ xa; điều này chỉ xảy ra nếu bạn đã định cấu hình trình thực thi từ xa riêng biệt.
--strategy mnemonic=strategy
Lựa chọn này kiểm soát vị trí và cách thực thi các lệnh, ghi đè --spawn_strategy (và --genrule_strategy bằng Genrule theo từ khoá) trên cơ sở từng từ khoá. Xem --spawn_strategy để biết các chiến lược được hỗ trợ và tác động của chúng.
--strategy_regexp=<filter,filter,...>=<strategy>
Tuỳ chọn này chỉ định chiến lược cần sử dụng để thực thi các lệnh có nội dung mô tả khớp với một regex_filter
nhất định. Hãy xem --per_file_copt để biết thông tin chi tiết về tính năng so khớp regex_filter. Xem --spawn_strategy để biết các chiến lược được hỗ trợ và tác động của chúng.
regex_filter
cuối cùng khớp với nội dung mô tả sẽ được dùng. Tuỳ chọn này sẽ ghi đè các cờ khác để chỉ định chiến lược.
- Ví dụ:
--strategy_regexp=//foo.*\\.cc,-//foo/bar=local
có nghĩa là chạy các thao tác bằng cách sử dụng chiến lượclocal
nếu nội dung mô tả của các thao tác đó khớp với //foo.*.cc nhưng không khớp với //foo/bar. - Ví dụ:
--strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed
chạy "Compiling //foo/bar/baz" bằng chiến lượcsandboxed
, nhưng đảo ngược thứ tự sẽ chạy bằnglocal
. - Ví dụ:
--strategy_regexp='Compiling.*/bar=local,sandboxed'
chạy "Compiling //foo/bar/baz" bằng chiến lượclocal
và quay lạisandboxed
nếu không thành công.
--genrule_strategy=strategy
Đây là cách viết tắt không được dùng nữa cho --strategy=Genrule=strategy
.
--jobs=n
(-j)
Tuỳ chọn này (lấy một đối số là số nguyên) chỉ định giới hạn về số lượng công việc sẽ được thực thi đồng thời trong giai đoạn thực thi của bản dựng.
--progress_report_interval=n
Bazel định kỳ in báo cáo tiến trình về những công việc chưa hoàn thành (chẳng hạn như các kiểm thử chạy trong thời gian dài). Lựa chọn này đặt tần suất báo cáo, tiến trình sẽ được in sau mỗi n
giây.
Giá trị mặc định là 0, tức là thuật toán gia tăng: báo cáo đầu tiên sẽ được in sau 10 giây, sau đó là 30 giây và sau đó tiến trình sẽ được báo cáo mỗi phút một lần.
Khi bazel đang sử dụng chế độ điều khiển con trỏ, như được chỉ định bởi --curses
, tiến trình sẽ được báo cáo mỗi giây.
--local_{ram,cpu}_resources resources or resource expression
Các lựa chọn này chỉ định lượng tài nguyên cục bộ (RAM tính bằng MB và số lượng lõi logic CPU) mà Bazel có thể xem xét khi lên lịch các hoạt động xây dựng và kiểm thử để chạy cục bộ. Chúng lấy một số nguyên hoặc một từ khoá (HOST_RAM hoặc HOST_CPUS) theo sau là [-|*
float]
(ví dụ: --local_cpu_resources=2
, --local_ram_resources=HOST_RAM*.5
, --local_cpu_resources=HOST_CPUS-1
). Các cờ này độc lập; bạn có thể đặt một hoặc cả hai. Theo mặc định, Bazel ước tính lượng RAM và số lõi CPU trực tiếp từ cấu hình của hệ thống cục bộ.
--[no]build_runfile_links
Tuỳ chọn này (được bật theo mặc định) chỉ định xem các đường liên kết tượng trưng runfiles cho các bài kiểm thử và tệp nhị phân có được tạo trong thư mục đầu ra hay không.
Việc sử dụng --nobuild_runfile_links
có thể hữu ích để xác thực xem tất cả các mục tiêu có biên dịch mà không phải chịu chi phí chung để tạo cây runfiles hay không.
Khi các quy trình kiểm thử (hoặc ứng dụng) được thực thi, các phần phụ thuộc dữ liệu thời gian chạy sẽ được thu thập cùng nhau ở một nơi. Trong cây đầu ra của Bazel, cây "runfiles" này thường được đặt làm phần tử ngang cấp của tệp nhị phân hoặc kiểm thử tương ứng.
Trong quá trình thực thi kiểm thử, bạn có thể truy cập vào runfile bằng cách sử dụng các đường dẫn có dạng $TEST_SRCDIR/canonical_repo_name/packagename/filename
.
Cây runfiles đảm bảo rằng các kiểm thử có quyền truy cập vào tất cả các tệp mà chúng đã khai báo sự phụ thuộc và không có gì khác. Theo mặc định, cây runfiles được triển khai bằng cách tạo một tập hợp các đường liên kết tượng trưng đến các tệp bắt buộc. Khi tập hợp các đường liên kết tăng lên, chi phí của thao tác này cũng tăng theo. Đối với một số bản dựng lớn, thao tác này có thể đóng góp đáng kể vào tổng thời gian xây dựng, đặc biệt là vì mỗi thử nghiệm (hoặc ứng dụng) riêng lẻ đều yêu cầu cây runfiles riêng.
--[no]build_runfile_manifests
Tuỳ chọn này (được bật theo mặc định) chỉ định xem các tệp kê khai runfile có được ghi vào cây đầu ra hay không.
Việc tắt tính năng này ngụ ý --nobuild_runfile_links
.
Bạn có thể tắt tính năng này khi thực thi các kiểm thử từ xa, vì cây runfiles sẽ được tạo từ xa từ các tệp kê khai trong bộ nhớ.
--[no]discard_analysis_cache
Khi bạn bật lựa chọn này, Bazel sẽ loại bỏ bộ nhớ đệm phân tích ngay trước khi quá trình thực thi bắt đầu, nhờ đó giải phóng thêm bộ nhớ (khoảng 10%) cho giai đoạn thực thi. Nhược điểm là các bản dựng gia tăng tiếp theo sẽ chậm hơn. Xem thêm chế độ tiết kiệm bộ nhớ.
--[no]keep_going
(-k)
Như trong GNU Make, giai đoạn thực thi của một bản dựng sẽ dừng khi gặp lỗi đầu tiên. Đôi khi, bạn nên cố gắng xây dựng càng nhiều càng tốt ngay cả khi gặp lỗi. Lựa chọn này cho phép hành vi đó và khi được chỉ định, bản dựng sẽ cố gắng tạo mọi mục tiêu có các điều kiện tiên quyết được tạo thành công, nhưng sẽ bỏ qua các lỗi.
Mặc dù lựa chọn này thường liên kết với giai đoạn thực thi của một bản dựng, nhưng nó cũng ảnh hưởng đến giai đoạn phân tích: nếu một số mục tiêu được chỉ định trong lệnh tạo, nhưng chỉ một số mục tiêu có thể được phân tích thành công, thì bản dựng sẽ dừng lại và báo lỗi trừ phi bạn chỉ định --keep_going
. Trong trường hợp đó, bản dựng sẽ chuyển sang giai đoạn thực thi, nhưng chỉ đối với những mục tiêu được phân tích thành công.
--[no]use_ijars
Tuỳ chọn này thay đổi cách Bazel biên dịch các mục tiêu java_library
. Thay vì sử dụng đầu ra của java_library
để biên dịch các mục tiêu java_library
phụ thuộc, Bazel sẽ tạo các jar giao diện chỉ chứa chữ ký của các thành viên không riêng tư (các phương thức và trường truy cập công khai, được bảo vệ và mặc định (gói)) và sử dụng các jar giao diện để biên dịch các mục tiêu phụ thuộc. Điều này giúp bạn tránh được việc biên dịch lại khi chỉ thay đổi nội dung phương thức hoặc thành viên riêng tư của một lớp.
--[no]interface_shared_objects
Lựa chọn này cho phép các đối tượng dùng chung của giao diện, giúp các tệp nhị phân và các thư viện dùng chung khác phụ thuộc vào giao diện của một đối tượng dùng chung, thay vì việc triển khai đối tượng đó. Khi chỉ có quá trình triển khai thay đổi, Bazel có thể tránh việc không cần thiết phải tạo lại các mục tiêu phụ thuộc vào thư viện dùng chung đã thay đổi.
Lựa chọn đầu ra
Các lựa chọn này xác định nội dung cần tạo hoặc kiểm thử.
--[no]build
Tuỳ chọn này khiến giai đoạn thực thi của bản dựng diễn ra; tuỳ chọn này được bật theo mặc định. Khi bạn tắt chế độ này, giai đoạn thực thi sẽ bị bỏ qua và chỉ có 2 giai đoạn đầu tiên là tải và phân tích xảy ra.
Lựa chọn này có thể hữu ích cho việc xác thực các tệp BUILD và phát hiện lỗi trong dữ liệu đầu vào mà không cần thực sự tạo bất cứ thứ gì.
--[no]build_tests_only
Nếu được chỉ định, Bazel sẽ chỉ tạo những gì cần thiết để chạy các quy tắc *_test
và test_suite
không được lọc do kích thước, thời gian chờ, thẻ hoặc ngôn ngữ của chúng.
Nếu được chỉ định, Bazel sẽ bỏ qua các mục tiêu khác được chỉ định trên dòng lệnh.
Theo mặc định, tuỳ chọn này bị tắt và Bazel sẽ tạo mọi thứ được yêu cầu, bao gồm cả các quy tắc *_test
và test_suite
được lọc ra khỏi quá trình kiểm thử. Điều này rất hữu ích vì việc chạy bazel test --build_tests_only foo/...
có thể không phát hiện được tất cả các lỗi hỏng bản dựng trong cây foo
.
--[no]check_up_to_date
Lựa chọn này khiến Bazel không thực hiện bản dựng mà chỉ kiểm tra xem tất cả các mục tiêu được chỉ định có phải là mới nhất hay không. Nếu có, quá trình tạo sẽ hoàn tất thành công như bình thường. Tuy nhiên, nếu có tệp nào đã lỗi thời, thì thay vì được tạo, một lỗi sẽ được báo cáo và quá trình tạo sẽ không thành công. Tuỳ chọn này có thể hữu ích để xác định xem bản dựng có được thực hiện gần đây hơn so với một lần chỉnh sửa nguồn hay không (ví dụ: đối với các bước kiểm tra trước khi gửi) mà không phải chịu chi phí của một bản dựng.
Xem thêm --check_tests_up_to_date
.
--[no]compile_one_dependency
Biên dịch một phần phụ thuộc duy nhất của các tệp đối số. Điều này hữu ích cho việc kiểm tra cú pháp của các tệp nguồn trong IDE, chẳng hạn như bằng cách tạo lại một mục tiêu duy nhất phụ thuộc vào tệp nguồn để phát hiện lỗi sớm nhất có thể trong chu kỳ chỉnh sửa/tạo/kiểm thử. Đối số này ảnh hưởng đến cách diễn giải tất cả các đối số không phải cờ: mỗi đối số phải là nhãn đích của tệp hoặc tên tệp thuần tuý tương ứng với thư mục đang hoạt động, đồng thời một quy tắc phụ thuộc vào từng tên tệp nguồn sẽ được tạo. Đối với các nguồn C++ và Java, các quy tắc trong cùng một không gian ngôn ngữ sẽ được ưu tiên chọn. Đối với nhiều quy tắc có cùng lựa chọn ưu tiên, quy tắc xuất hiện đầu tiên trong tệp BUILD sẽ được chọn. Một mẫu đích được đặt tên rõ ràng không tham chiếu đến tệp nguồn sẽ dẫn đến lỗi.
--save_temps
Tuỳ chọn --save_temps
sẽ lưu các đầu ra tạm thời của trình biên dịch. Những tệp này bao gồm tệp .s (mã hợp ngữ), .i (C đã xử lý trước) và .ii (tệp C++ đã xử lý trước). Những đầu ra này thường hữu ích cho việc gỡ lỗi. Các tệp tạm thời sẽ chỉ được tạo cho nhóm mục tiêu được chỉ định trên dòng lệnh.
Cờ --save_temps
hiện chỉ hoạt động đối với các quy tắc cc_*.
Để đảm bảo Bazel in vị trí của các tệp đầu ra bổ sung, hãy kiểm tra để đảm bảo rằng chế độ cài đặt --show_result n
của bạn đủ cao.
--build_tag_filters=tag[,tag]*
Nếu được chỉ định, Bazel sẽ chỉ tạo những mục tiêu có ít nhất một thẻ bắt buộc (nếu có thẻ nào được chỉ định) và không có thẻ nào bị loại trừ. Bộ lọc thẻ bản dựng được chỉ định dưới dạng danh sách từ khoá thẻ được phân tách bằng dấu phẩy, có thể được đặt trước bằng dấu "-" dùng để biểu thị các thẻ bị loại trừ. Các thẻ bắt buộc cũng có thể có dấu "+" ở phía trước.
Khi chạy các kiểm thử, Bazel bỏ qua --build_tag_filters
cho các mục tiêu kiểm thử. Các mục tiêu này được tạo và chạy ngay cả khi không khớp với bộ lọc này. Để tránh tạo các mục tiêu này, hãy lọc các mục tiêu kiểm thử bằng cách sử dụng --test_tag_filters
hoặc bằng cách loại trừ rõ ràng các mục tiêu đó.
--test_size_filters=size[,size]*
Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo nếu --build_tests_only
cũng được chỉ định) các mục tiêu kiểm thử có kích thước đã cho. Bộ lọc kích thước kiểm thử được chỉ định dưới dạng danh sách các giá trị kích thước kiểm thử được phép phân tách bằng dấu phẩy (nhỏ, trung bình, lớn hoặc rất lớn), có thể có dấu "-" ở phía trước (không bắt buộc) dùng để biểu thị các kích thước kiểm thử bị loại trừ. Ví dụ:
% bazel test --test_size_filters=small,medium //foo:all
và
% bazel test --test_size_filters=-large,-enormous //foo:all
sẽ chỉ kiểm thử các bài kiểm thử nhỏ và vừa bên trong //foo.
Theo mặc định, bộ lọc kích thước kiểm thử sẽ không được áp dụng.
--test_timeout_filters=timeout[,timeout]*
Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo nếu --build_tests_only
cũng được chỉ định) các mục tiêu kiểm thử có thời gian chờ đã cho. Bộ lọc thời gian chờ kiểm thử được chỉ định dưới dạng danh sách các giá trị thời gian chờ kiểm thử được phép phân tách bằng dấu phẩy (ngắn, vừa phải, dài hoặc vĩnh viễn), có thể có dấu "-" ở phía trước để biểu thị thời gian chờ kiểm thử bị loại trừ. Hãy xem --test_size_filters để biết cú pháp mẫu.
Theo mặc định, tính năng lọc thời gian chờ kiểm thử sẽ không được áp dụng.
--test_tag_filters=tag[,tag]*
Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo nếu --build_tests_only
cũng được chỉ định) các mục tiêu kiểm thử có ít nhất một thẻ bắt buộc (nếu có thẻ nào được chỉ định) và không có thẻ nào bị loại trừ. Bộ lọc thẻ kiểm thử được chỉ định dưới dạng danh sách từ khoá thẻ được phân tách bằng dấu phẩy, có thể có dấu "-" ở phía trước để biểu thị các thẻ bị loại trừ. Các thẻ bắt buộc cũng có thể có dấu "+" ở phía trước.
Ví dụ:
% bazel test --test_tag_filters=performance,stress,-flaky //myproject:all
sẽ kiểm thử các mục tiêu được gắn thẻ bằng thẻ performance
hoặc stress
nhưng không được gắn thẻ bằng thẻ flaky
.
Theo mặc định, tính năng lọc thẻ kiểm thử sẽ không được áp dụng. Xin lưu ý rằng bạn cũng có thể lọc theo thẻ size
và local
của kiểm thử theo cách này.
--test_lang_filters=string[,string]*
Chỉ định danh sách chuỗi được phân tách bằng dấu phẩy đề cập đến tên của các lớp quy tắc kiểm thử. Để tham chiếu đến lớp quy tắc foo_test
, hãy dùng chuỗi "foo". Bazel sẽ chỉ kiểm thử (hoặc tạo nếu --build_tests_only
cũng được chỉ định) các mục tiêu của những lớp quy tắc được tham chiếu. Để loại trừ những mục tiêu đó, hãy dùng chuỗi "-foo". Ví dụ:
% bazel test --test_lang_filters=foo,bar //baz/...
sẽ chỉ kiểm thử những mục tiêu là các thực thể của foo_test
hoặc bar_test
trong //baz/...
, trong khi
% bazel test --test_lang_filters=-foo,-bar //baz/...
sẽ kiểm thử tất cả các mục tiêu trong //baz/...
, ngoại trừ các thực thể foo_test
và bar_test
.
--test_filter=filter-expression
Chỉ định một bộ lọc mà trình chạy kiểm thử có thể dùng để chọn một tập hợp con kiểm thử để chạy. Tất cả các mục tiêu được chỉ định trong lệnh gọi đều được tạo, nhưng tuỳ thuộc vào biểu thức, chỉ một số mục tiêu trong số đó có thể được thực thi; trong một số trường hợp, chỉ một số phương thức kiểm thử nhất định được chạy.
Việc diễn giải cụ thể filter-expression là tuỳ thuộc vào khung kiểm thử chịu trách nhiệm chạy kiểm thử. Đó có thể là một glob, chuỗi con hoặc biểu thức chính quy. --test_filter
là một tiện ích khi truyền các đối số bộ lọc --test_arg
khác nhau, nhưng không phải mọi khung đều hỗ trợ tiện ích này.
Độ chi tiết
Các lựa chọn này kiểm soát mức độ chi tiết của đầu ra của Bazel, cho dù là đến thiết bị đầu cuối hay đến các tệp nhật ký bổ sung.
--explain=logfile
Lựa chọn này (cần có đối số tên tệp) khiến trình kiểm tra phần phụ thuộc trong giai đoạn thực thi của bazel build
giải thích cho từng bước xây dựng, hoặc lý do bước đó đang được thực thi hoặc lý do bước đó đã được cập nhật. Lời giải thích được ghi vào logfile.
Nếu bạn gặp phải các bản dựng lại không mong muốn, thì lựa chọn này có thể giúp bạn hiểu rõ lý do. Thêm mã này vào .bazelrc
để quá trình ghi nhật ký diễn ra cho tất cả các bản dựng tiếp theo, sau đó kiểm tra nhật ký khi bạn thấy một bước thực thi được thực hiện ngoài dự kiến. Lựa chọn này có thể làm giảm hiệu suất một chút, vì vậy, bạn nên xoá lựa chọn này khi không cần dùng nữa.
--verbose_explanations
Tuỳ chọn này làm tăng độ chi tiết của nội dung giải thích được tạo khi bạn bật tuỳ chọn --explain.
Cụ thể, nếu bạn bật chế độ giải thích chi tiết và một tệp đầu ra được tạo lại vì lệnh dùng để tạo tệp đó đã thay đổi, thì đầu ra trong tệp giải thích sẽ bao gồm đầy đủ thông tin chi tiết về lệnh mới (ít nhất là đối với hầu hết các lệnh).
Việc sử dụng lựa chọn này có thể làm tăng đáng kể độ dài của tệp giải thích được tạo và mức giảm hiệu suất khi sử dụng --explain
.
Nếu --explain
không được bật, thì --verbose_explanations
sẽ không có hiệu lực.
--profile=file
Lựa chọn này (nhận một đối số tên tệp) khiến Bazel ghi dữ liệu phân tích tài nguyên vào một tệp. Sau đó, bạn có thể phân tích hoặc phân tích cú pháp dữ liệu bằng lệnh bazel analyze-profile
. Hồ sơ Xây dựng có thể hữu ích trong việc tìm hiểu xem lệnh build
của Bazel đang dành thời gian cho việc gì.
--[no]show_loading_progress
Tuỳ chọn này khiến Bazel xuất các thông báo về tiến trình tải gói. Nếu bạn tắt chế độ này, các thông báo sẽ không xuất hiện.
--[no]show_progress
Tuỳ chọn này khiến các thông báo tiến trình xuất hiện; tuỳ chọn này được bật theo mặc định. Khi bị vô hiệu hoá, các thông báo tiến trình sẽ bị chặn.
--show_progress_rate_limit=n
Tuỳ chọn này khiến bazel hiển thị tối đa một thông báo tiến trình sau mỗi n
giây, trong đó n là một số thực.
Giá trị mặc định cho lựa chọn này là 0,02, tức là bazel sẽ giới hạn số lượng thông báo tiến trình ở mức 1 thông báo cho mỗi 0,02 giây.
--show_result=n
Tuỳ chọn này kiểm soát việc in thông tin kết quả ở cuối lệnh bazel build
. Theo mặc định, nếu bạn chỉ định một mục tiêu xây dựng duy nhất, Bazel sẽ in một thông báo cho biết mục tiêu đó có được cập nhật thành công hay không. Nếu có, Bazel sẽ in danh sách các tệp đầu ra mà mục tiêu đã tạo. Nếu bạn chỉ định nhiều mục tiêu, thông tin kết quả sẽ không xuất hiện.
Mặc dù thông tin kết quả có thể hữu ích cho các bản dựng của một mục tiêu duy nhất hoặc một vài mục tiêu, nhưng đối với các bản dựng lớn (chẳng hạn như toàn bộ cây dự án cấp cao nhất), thông tin này có thể quá nhiều và gây mất tập trung; lựa chọn này cho phép kiểm soát thông tin. --show_result
nhận một đối số số nguyên, là số lượng mục tiêu tối đa mà thông tin kết quả đầy đủ sẽ được in. Theo mặc định, giá trị này là 1. Nếu vượt quá ngưỡng này, hệ thống sẽ không hiển thị thông tin kết quả cho từng mục tiêu. Do đó, giá trị 0 luôn khiến thông tin kết quả bị chặn và một giá trị rất lớn luôn khiến kết quả được in.
Người dùng có thể muốn chọn một giá trị ở giữa nếu họ thường xuyên thay đổi giữa việc tạo một nhóm nhỏ các mục tiêu (ví dụ: trong chu kỳ biên dịch-chỉnh sửa-kiểm thử) và một nhóm lớn các mục tiêu (ví dụ: khi thiết lập một không gian làm việc mới hoặc chạy các kiểm thử hồi quy). Trong trường hợp trước, thông tin kết quả rất hữu ích, trong khi ở trường hợp sau thì ít hữu ích hơn. Giống như tất cả các lựa chọn, bạn có thể chỉ định lựa chọn này một cách gián tiếp thông qua tệp .bazelrc
.
Các tệp này được in để bạn dễ dàng sao chép và dán tên tệp vào trình bao, nhằm chạy các tệp thực thi đã tạo. Các tập lệnh điều khiển bản dựng có thể dễ dàng phân tích các thông báo "mới nhất" hoặc "thất bại" cho từng mục tiêu.
--sandbox_debug
Tuỳ chọn này khiến Bazel in thêm thông tin gỡ lỗi khi sử dụng hộp cát để thực thi hành động. Lựa chọn này cũng giữ lại các thư mục hộp cát để có thể kiểm tra các tệp mà các thao tác nhìn thấy trong quá trình thực thi.
--subcommands
(-s
)
Lựa chọn này khiến giai đoạn thực thi của Bazel in toàn bộ dòng lệnh cho từng lệnh trước khi thực thi.
>>>>> # //examples/cpp:hello-world [action 'Linking examples/cpp/hello-world'] (cd /home/johndoe/.cache/bazel/_bazel_johndoe/4c084335afceb392cfbe7c31afee3a9f/bazel && \ exec env - \ /usr/bin/gcc -o bazel-out/local-fastbuild/bin/examples/cpp/hello-world -B/usr/bin/ -Wl,-z,relro,-z,now -no-canonical-prefixes -pass-exit-codes -Wl,-S -Wl,@bazel-out/local_linux-fastbuild/bin/examples/cpp/hello-world-2.params)
Nếu có thể, các lệnh sẽ được in bằng cú pháp tương thích với Bourne shell để có thể dễ dàng sao chép và dán vào dấu nhắc lệnh shell.
(Dấu ngoặc đơn xung quanh được cung cấp để bảo vệ trình bao của bạn khỏi các lệnh gọi cd
và exec
; hãy nhớ sao chép chúng!)
Tuy nhiên, một số lệnh được triển khai nội bộ trong Bazel, chẳng hạn như tạo cây liên kết tượng trưng. Đối với những trường hợp này, không có dòng lệnh nào để hiển thị.
--subcommands=pretty_print
có thể được truyền để in các đối số của lệnh dưới dạng danh sách thay vì dưới dạng một dòng. Việc này có thể giúp các dòng lệnh dài dễ đọc hơn.
Xem thêm --verbose_failures bên dưới.
Để ghi các lệnh con vào một tệp ở định dạng thân thiện với công cụ, hãy xem --execution_log_json_file và --execution_log_binary_file.
--verbose_failures
Tuỳ chọn này khiến giai đoạn thực thi của Bazel in dòng lệnh đầy đủ cho các lệnh không thành công. Điều này có thể rất hữu ích khi gỡ lỗi một bản dựng không thành công.
Các lệnh không thành công được in bằng cú pháp tương thích với Bourne shell, phù hợp để sao chép và dán vào dấu nhắc của shell.
Trạng thái Workspace
Sử dụng các lựa chọn này để "đóng dấu" các tệp nhị phân do Bazel tạo: để nhúng thêm thông tin vào các tệp nhị phân, chẳng hạn như phiên bản kiểm soát nguồn hoặc thông tin khác liên quan đến không gian làm việc. Bạn có thể sử dụng cơ chế này với các quy tắc hỗ trợ thuộc tính stamp
, chẳng hạn như genrule
, cc_binary
và nhiều quy tắc khác.
--workspace_status_command=program
Cờ này cho phép bạn chỉ định một tệp nhị phân mà Bazel chạy trước mỗi bản dựng. Chương trình có thể báo cáo thông tin về trạng thái của không gian làm việc, chẳng hạn như phiên bản kiểm soát nguồn hiện tại.
Giá trị của cờ phải là đường dẫn đến một chương trình gốc. Trên Linux/macOS, đây có thể là bất kỳ tệp thực thi nào. Trên Windows, đây phải là một tệp nhị phân gốc, thường là tệp ".exe", ".bat" hoặc ".cmd".
Chương trình phải in không hoặc nhiều cặp khoá/giá trị vào đầu ra chuẩn, mỗi mục nhập trên một dòng, sau đó thoát với giá trị 0 (nếu không, quá trình tạo sẽ thất bại). Tên khoá có thể là bất kỳ tên nào nhưng chỉ được sử dụng chữ cái viết hoa và dấu gạch dưới. Khoảng trắng đầu tiên sau tên khoá sẽ phân tách tên khoá đó với giá trị. Giá trị là phần còn lại của dòng (bao gồm cả các khoảng trắng bổ sung). Cả khoá và giá trị đều không được trải dài trên nhiều dòng. Không được trùng lặp các khoá.
Bazel phân vùng các khoá thành hai nhóm: "ổn định" và "dễ biến động". ("ổn định" và "dễ biến động" là những tên hơi phản trực giác, vì vậy bạn không cần phải suy nghĩ nhiều về chúng.)
Sau đó, Bazel sẽ ghi các cặp khoá-giá trị vào hai tệp:
bazel-out/stable-status.txt
chứa tất cả các khoá và giá trị trong đó tên của khoá bắt đầu bằngSTABLE_
bazel-out/volatile-status.txt
chứa các khoá còn lại và giá trị của chúng
Hợp đồng là:
Giá trị của các khoá "ổn định" nên ít thay đổi nhất có thể. Nếu nội dung của
bazel-out/stable-status.txt
thay đổi, Bazel sẽ vô hiệu hoá các thao tác phụ thuộc vào nội dung đó. Nói cách khác, nếu giá trị của một khoá ổn định thay đổi, Bazel sẽ chạy lại các thao tác được đóng dấu. Do đó, trạng thái ổn định không được chứa những thứ như dấu thời gian, vì chúng luôn thay đổi và sẽ khiến Bazel chạy lại các thao tác được đóng dấu với mỗi bản dựng.Bazel luôn xuất các khoá ổn định sau đây:
BUILD_EMBED_LABEL
: giá trị của--embed_label
BUILD_HOST
: tên của máy chủ lưu trữ mà Bazel đang chạyBUILD_USER
: tên của người dùng mà Bazel đang chạy
Giá trị của các khoá "dễ biến động" có thể thay đổi thường xuyên. Bazel dự kiến các tệp này sẽ thay đổi liên tục, chẳng hạn như dấu thời gian và sẽ cập nhật tệp
bazel-out/volatile-status.txt
một cách thích hợp. Tuy nhiên, để tránh việc chạy lại các thao tác được đóng dấu mọi lúc, Bazel giả vờ như thể tệp biến động không bao giờ thay đổi. Nói cách khác, nếu tệp trạng thái biến động là tệp duy nhất có nội dung đã thay đổi, thì Bazel sẽ không làm mất hiệu lực các thao tác phụ thuộc vào tệp đó. Nếu các đầu vào khác của hành động đã thay đổi, thì Bazel sẽ chạy lại hành động đó và hành động sẽ thấy trạng thái biến động đã cập nhật, nhưng chỉ trạng thái biến động thay đổi sẽ không làm mất hiệu lực hành động.Bazel luôn xuất ra các khoá biến động sau:
BUILD_TIMESTAMP
: thời gian của bản dựng tính bằng giây kể từ Thời gian bắt đầu của hệ thống Unix (giá trị củaSystem.currentTimeMillis()
chia cho một nghìn)FORMATTED_DATE
: thời gian của bản dựng. Được định dạng làyyyy MMM d HH mm ss EEE
(ví dụ: 2023 Jun 2 01 44 29 Fri) theo giờ UTC.
Trên Linux/macOS, bạn có thể truyền --workspace_status_command=/bin/true
để tắt việc truy xuất trạng thái không gian làm việc, vì true
không làm gì cả, thành công (thoát với giá trị 0) và không in đầu ra. Trên Windows, bạn có thể truyền đường dẫn của true.exe
trong MSYS để đạt được hiệu ứng tương tự.
Nếu lệnh trạng thái không gian làm việc không thành công (thoát khác 0) vì bất kỳ lý do gì, thì bản dựng sẽ không thành công.
Chương trình ví dụ trên Linux bằng Git:
#!/bin/bash echo "CURRENT_TIME $(date +%s)" echo "RANDOM_HASH $(cat /proc/sys/kernel/random/uuid)" echo "STABLE_GIT_COMMIT $(git rev-parse HEAD)" echo "STABLE_USER_NAME $USER"
Truyền đường dẫn của chương trình này bằng --workspace_status_command
, tệp trạng thái ổn định sẽ bao gồm các dòng STABLE và tệp trạng thái biến động sẽ bao gồm các dòng còn lại.
--[no]stamp
Tuỳ chọn này, cùng với thuộc tính quy tắc stamp
, kiểm soát việc có nhúng thông tin bản dựng vào các tệp nhị phân hay không.
Bạn có thể bật hoặc tắt tính năng đóng dấu một cách rõ ràng theo từng quy tắc bằng cách sử dụng thuộc tính stamp
. Vui lòng tham khảo Bách khoa toàn thư về bản dựng để biết thông tin chi tiết. Khi một quy tắc đặt stamp = -1
(mặc định cho các quy tắc *_binary
), lựa chọn này sẽ xác định xem có bật tính năng đóng dấu hay không.
Bazel không bao giờ đóng dấu các tệp nhị phân được tạo cho cấu hình exec, bất kể lựa chọn này hay thuộc tính stamp
. Đối với các quy tắc đặt stamp =
0
(mặc định cho các quy tắc *_test
), việc đóng dấu sẽ bị vô hiệu hoá bất kể --[no]stamp
. Việc chỉ định --stamp
không buộc các mục tiêu phải được tạo lại nếu các phần phụ thuộc của chúng không thay đổi.
Việc đặt --nostamp
thường được mong muốn để tăng hiệu suất bản dựng, vì chế độ này làm giảm sự biến động của dữ liệu đầu vào và tối đa hoá việc lưu vào bộ nhớ đệm của bản dựng.
Nền tảng
Sử dụng các lựa chọn này để kiểm soát nền tảng lưu trữ và nền tảng mục tiêu định cấu hình cách hoạt động của các bản dựng, đồng thời kiểm soát những nền tảng thực thi và chuỗi công cụ có sẵn cho các quy tắc Bazel.
Vui lòng xem thông tin cơ bản về Nền tảng và Chuỗi công cụ.
--platforms=labels
Nhãn của các quy tắc nền tảng mô tả nền tảng mục tiêu cho lệnh hiện tại.
--host_platform=label
Nhãn của một quy tắc nền tảng mô tả hệ thống máy chủ.
--extra_execution_platforms=labels
Các nền tảng có sẵn dưới dạng nền tảng thực thi để chạy các thao tác. Bạn có thể chỉ định nền tảng theo mục tiêu chính xác hoặc theo mẫu mục tiêu. Những nền tảng này sẽ được xem xét trước những nền tảng được khai báo trong các tệp MODULE.bazel bằng register_execution_platforms(). Lựa chọn này chấp nhận một danh sách nền tảng được phân tách bằng dấu phẩy theo thứ tự ưu tiên. Nếu cờ được truyền nhiều lần, thì cờ gần đây nhất sẽ ghi đè.
--extra_toolchains=labels
Các quy tắc chuỗi công cụ cần được xem xét trong quá trình phân giải chuỗi công cụ. Bạn có thể chỉ định chuỗi công cụ theo mục tiêu chính xác hoặc dưới dạng mẫu mục tiêu. Các chuỗi công cụ này sẽ được xem xét trước những chuỗi công cụ được khai báo trong các tệp MODULE.bazel bằng register_toolchains().
--toolchain_resolution_debug=regex
In thông tin gỡ lỗi trong khi tìm kiếm chuỗi công cụ nếu loại chuỗi công cụ khớp với biểu thức chính quy. Bạn có thể phân tách nhiều biểu thức chính quy bằng dấu phẩy. Bạn có thể phủ định biểu thức chính quy bằng cách sử dụng -
ở đầu. Điều này có thể giúp các nhà phát triển quy tắc Bazel hoặc Starlark gỡ lỗi các lỗi do thiếu chuỗi công cụ.
Khác
--flag_alias=alias_name=target_path
Một cờ tiện lợi được dùng để liên kết các chế độ cài đặt bản dựng Starlark dài hơn với một tên ngắn hơn. Để biết thêm thông tin chi tiết, hãy xem phần Cấu hình Starlark.
--symlink_prefix=string
Thay đổi tiền tố của các symlink tiện lợi được tạo. Giá trị mặc định cho tiền tố đường liên kết tượng trưng là bazel-
. Giá trị này sẽ tạo ra các đường liên kết tượng trưng bazel-bin
, bazel-testlogs
và bazel-genfiles
.
Nếu không tạo được các đường liên kết tượng trưng vì bất kỳ lý do nào, thì hệ thống sẽ đưa ra cảnh báo nhưng bản dựng vẫn được coi là thành công. Cụ thể, điều này cho phép bạn tạo trong một thư mục chỉ có thể đọc hoặc một thư mục mà bạn không có quyền ghi vào. Mọi đường dẫn được in trong các thông báo thông tin ở phần kết thúc của bản dựng sẽ chỉ sử dụng dạng ngắn tương đối của symlink nếu các symlink trỏ đến vị trí dự kiến; nói cách khác, bạn có thể dựa vào tính chính xác của những đường dẫn đó, ngay cả khi bạn không thể dựa vào việc tạo symlink.
Một số giá trị phổ biến của lựa chọn này:
Ngăn chặn việc tạo symlink:
--symlink_prefix=/
sẽ khiến Bazel không tạo hoặc cập nhật bất kỳ symlink nào, kể cả symlinkbazel-out
vàbazel-<workspace>
. Hãy dùng lựa chọn này để hoàn toàn ngăn chặn việc tạo symlink.Giảm sự lộn xộn:
--symlink_prefix=.bazel/
sẽ khiến Bazel tạo các đường liên kết tượng trưng có tên làbin
(v.v.) bên trong một thư mục ẩn.bazel
.
--platform_suffix=string
Thêm một hậu tố vào tên ngắn của cấu hình. Hậu tố này được dùng để xác định thư mục đầu ra. Việc đặt tuỳ chọn này thành các giá trị khác nhau sẽ đặt các tệp vào các thư mục khác nhau, ví dụ: để cải thiện tỷ lệ truy cập bộ nhớ đệm cho các bản dựng nếu không sẽ ghi đè các tệp đầu ra của nhau hoặc để giữ các tệp đầu ra để so sánh.
--default_visibility=(private|public)
Cờ tạm thời để kiểm thử các thay đổi về chế độ hiển thị mặc định của bazel. Không dành cho mục đích sử dụng chung nhưng được ghi lại để đảm bảo tính đầy đủ.
--starlark_cpu_profile=_file_
Cờ này (có giá trị là tên của một tệp) khiến Bazel thu thập số liệu thống kê về mức sử dụng CPU của tất cả các luồng Starlark và ghi hồ sơ (ở định dạng pprof) vào tệp được đặt tên.
Sử dụng lựa chọn này để giúp xác định các hàm Starlark khiến quá trình tải và phân tích diễn ra chậm do tính toán quá mức. Ví dụ:
$ bazel build --nobuild --starlark_cpu_profile=/tmp/pprof.gz my/project/... $ pprof /tmp/pprof.gz (pprof) top Type: CPU Time: Feb 6, 2020 at 12:06pm (PST) Duration: 5.26s, Total samples = 3.34s (63.55%) Showing nodes accounting for 3.34s, 100% of 3.34s total flat flat% sum% cum cum% 1.86s 55.69% 55.69% 1.86s 55.69% sort_source_files 1.02s 30.54% 86.23% 1.02s 30.54% expand_all_combinations 0.44s 13.17% 99.40% 0.44s 13.17% range 0.02s 0.6% 100% 3.34s 100% sorted 0 0% 100% 1.38s 41.32% my/project/main/BUILD 0 0% 100% 1.96s 58.68% my/project/library.bzl 0 0% 100% 3.34s 100% main
Đối với các khung hiển thị khác nhau của cùng một dữ liệu, hãy thử các lệnh pprof
svg
, web
và list
.
Sử dụng Bazel cho các bản phát hành
Kỹ sư phần mềm sử dụng Bazel trong chu kỳ phát triển và kỹ sư phát hành sử dụng Bazel khi chuẩn bị các tệp nhị phân để triển khai cho hoạt động sản xuất. Phần này cung cấp danh sách các mẹo dành cho kỹ sư phát hành sử dụng Bazel.
Các lựa chọn quan trọng
Khi sử dụng Bazel cho các bản phát hành, các vấn đề tương tự sẽ xảy ra như đối với những tập lệnh khác thực hiện một bản dựng. Để biết thêm thông tin chi tiết, hãy xem phần Gọi Bazel từ tập lệnh. Cụ thể, bạn nên sử dụng các lựa chọn sau:
Những lựa chọn này cũng quan trọng:
--package_path
--symlink_prefix
: để quản lý các bản dựng cho nhiều cấu hình, bạn nên phân biệt từng bản dựng bằng một mã nhận dạng riêng biệt, chẳng hạn như "64 bit" so với "32 bit". Tuỳ chọn này phân biệt các đường liên kết tượng trưngbazel-bin
(v.v.).
Chạy kiểm thử
Để tạo và chạy kiểm thử bằng bazel, hãy nhập bazel test
, sau đó nhập tên của các mục tiêu kiểm thử.
Theo mặc định, lệnh này thực hiện đồng thời hoạt động kiểm thử và tạo bản dựng, tạo tất cả các mục tiêu được chỉ định (bao gồm cả mọi mục tiêu không phải kiểm thử được chỉ định trên dòng lệnh) và kiểm thử các mục tiêu *_test
và test_suite
ngay khi các điều kiện tiên quyết của chúng được tạo, nghĩa là quá trình thực thi kiểm thử được xen kẽ với quá trình tạo bản dựng. Việc này thường giúp tăng tốc độ đáng kể.
Tùy chọn cho bazel test
--cache_test_results=(yes|no|auto)
(-t
)
Nếu bạn đặt lựa chọn này thành "auto" (mặc định), thì Bazel sẽ chỉ chạy lại một kiểm thử nếu có bất kỳ điều kiện nào sau đây được áp dụng:
- Bazel phát hiện các thay đổi trong kiểm thử hoặc các phần phụ thuộc của kiểm thử
- thử nghiệm được đánh dấu là
external
- đã yêu cầu chạy nhiều thử nghiệm bằng
--runs_per_test
- thử nghiệm không thành công.
Nếu là "no", tất cả các kiểm thử sẽ được thực thi vô điều kiện.
Nếu là "có", hành vi lưu vào bộ nhớ đệm sẽ giống như hành vi tự động, ngoại trừ việc hành vi này có thể lưu vào bộ nhớ đệm các lần kiểm thử không thành công và các lần chạy kiểm thử bằng --runs_per_test
.
Người dùng đã bật lựa chọn này theo mặc định trong tệp .bazelrc
có thể thấy các từ viết tắt -t
(bật) hoặc -t-
(tắt) thuận tiện cho việc ghi đè chế độ mặc định trong một lần chạy cụ thể.
--check_tests_up_to_date
Tuỳ chọn này yêu cầu Bazel không chạy các kiểm thử mà chỉ kiểm tra và báo cáo kết quả kiểm thử được lưu vào bộ nhớ đệm. Nếu có bất kỳ kiểm thử nào chưa được tạo và chạy trước đó hoặc có kết quả kiểm thử đã lỗi thời (ví dụ: do mã nguồn hoặc các lựa chọn xây dựng đã thay đổi), thì Bazel sẽ báo cáo thông báo lỗi ("test result is not up-to-date"), ghi lại trạng thái của kiểm thử là "NO STATUS" (màu đỏ, nếu bật đầu ra màu) và trả về mã thoát khác 0.
Tuỳ chọn này cũng ngụ ý hành vi --check_up_to_date
.
Lựa chọn này có thể hữu ích cho các bước kiểm tra trước khi gửi.
--test_verbose_timeout_warnings
Lựa chọn này yêu cầu Bazel cảnh báo rõ ràng cho người dùng nếu thời gian chờ của một kiểm thử dài hơn đáng kể so với thời gian thực thi thực tế của kiểm thử đó. Mặc dù bạn nên đặt thời gian chờ của một kiểm thử sao cho kiểm thử đó không bị không ổn định, nhưng một kiểm thử có thời gian chờ quá dài có thể che giấu các vấn đề thực tế phát sinh một cách bất ngờ.
Ví dụ: một bài kiểm thử thường thực thi trong một hoặc hai phút không được có thời gian chờ là ETERNAL hoặc LONG vì những thời gian này quá dài.
Lựa chọn này hữu ích khi giúp người dùng quyết định giá trị thời gian chờ phù hợp hoặc kiểm tra tính hợp lý của các giá trị thời gian chờ hiện có.
--[no]test_keep_going
Theo mặc định, tất cả các kiểm thử đều được chạy cho đến khi hoàn tất. Tuy nhiên, nếu cờ này bị tắt, bản dựng sẽ bị huỷ trên mọi bài kiểm thử không đạt. Các bước tạo bản dựng và lệnh gọi kiểm thử tiếp theo sẽ không chạy và các lệnh gọi đang diễn ra sẽ bị huỷ.
Đừng chỉ định cả --notest_keep_going
và --keep_going
.
--flaky_test_attempts=attempts
Tuỳ chọn này chỉ định số lần tối đa mà một bài kiểm thử sẽ được thực hiện nếu không thành công vì bất kỳ lý do nào. Một kiểm thử ban đầu không thành công nhưng cuối cùng thành công sẽ được báo cáo là FLAKY
trong bản tóm tắt kiểm thử. Tuy nhiên, nó được coi là đã vượt qua khi xác định mã thoát Bazel hoặc tổng số bài kiểm thử đã vượt qua. Những bài kiểm thử không thành công trong tất cả các lần thử được phép đều được coi là không thành công.
Theo mặc định (khi bạn không chỉ định lựa chọn này hoặc khi bạn đặt lựa chọn này thành mặc định), chỉ một lần thử được phép cho các bài kiểm tra thông thường và 3 lần cho các quy tắc kiểm thử có thuộc tính flaky
được đặt. Bạn có thể chỉ định một giá trị nguyên để ghi đè giới hạn tối đa về số lần thử nghiệm. Bazel cho phép tối đa 10 lần thử nghiệm để ngăn chặn hành vi lạm dụng hệ thống.
--runs_per_test=[regex@]number
Tuỳ chọn này chỉ định số lần thực thi mỗi kiểm thử. Tất cả các lần thực thi kiểm thử đều được coi là các kiểm thử riêng biệt (chức năng dự phòng sẽ áp dụng cho từng lần thực thi một cách độc lập).
Trạng thái của một mục tiêu có các lần chạy không thành công phụ thuộc vào giá trị của cờ --runs_per_test_detects_flakes
:
- Nếu không có, mọi lần chạy không thành công sẽ khiến toàn bộ quy trình kiểm thử không thành công.
- Nếu có và 2 lần chạy từ cùng một phân đoạn trả về PASS và FAIL, thì kiểm thử sẽ nhận được trạng thái không ổn định (trừ phi các lần chạy không thành công khác khiến kiểm thử không thành công).
Nếu bạn chỉ định một số duy nhất, tất cả các kiểm thử sẽ chạy số lần đó.
Ngoài ra, bạn có thể chỉ định một biểu thức chính quy bằng cách sử dụng cú pháp regex@number. Điều này hạn chế hiệu ứng của --runs_per_test
đối với các mục tiêu khớp với biểu thức chính quy (--runs_per_test=^//pizza:.*@4
chạy tất cả các kiểm thử trong //pizza/
4 lần).
Bạn có thể chỉ định loại --runs_per_test
này nhiều lần.
--[no]runs_per_test_detects_flakes
Nếu bạn chỉ định lựa chọn này (theo mặc định, lựa chọn này không được chỉ định), Bazel sẽ phát hiện các phân đoạn kiểm thử không ổn định thông qua --runs_per_test
. Nếu một hoặc nhiều lần chạy cho một phân đoạn duy nhất không thành công và một hoặc nhiều lần chạy cho cùng một phân đoạn thành công, thì mục tiêu sẽ được coi là không ổn định với cờ. Nếu bạn không chỉ định, mục tiêu sẽ báo cáo trạng thái thất bại.
--test_summary=output_style
Chỉ định cách hiển thị bản tóm tắt kết quả kiểm thử.
short
in kết quả của từng kiểm thử cùng với tên của tệp chứa đầu ra kiểm thử nếu kiểm thử không thành công. Đây là giá trị mặc định.terse
giống nhưshort
, nhưng ngắn hơn nữa: chỉ in thông tin về những bài kiểm thử không vượt qua.detailed
in từng trường hợp kiểm thử riêng lẻ không thành công, chứ không chỉ từng lượt kiểm thử. Tên của các tệp đầu ra kiểm thử sẽ bị bỏ qua.none
không in bản tóm tắt kiểm thử.
--test_output=output_style
Chỉ định cách hiển thị kết quả kiểm thử:
summary
cho biết thông tin tóm tắt về việc từng bài kiểm thử có vượt qua hay không. Cũng cho biết tên tệp nhật ký đầu ra cho các kiểm thử không thành công. Thông tin tóm tắt sẽ được in ở cuối bản dựng (trong quá trình tạo bản dựng, bạn sẽ chỉ thấy các thông báo tiến trình đơn giản khi các bài kiểm thử bắt đầu, vượt qua hoặc thất bại). Đây là hành vi mặc định.errors
chỉ gửi đầu ra stdout/stderr kết hợp từ các kiểm thử không thành công vào stdout ngay sau khi kiểm thử hoàn tất, đảm bảo rằng đầu ra kiểm thử từ các kiểm thử đồng thời không xen kẽ với nhau. In bản tóm tắt tại bản dựng theo đầu ra tóm tắt ở trên.all
tương tự nhưerrors
nhưng in đầu ra cho tất cả các kiểm thử, kể cả những kiểm thử đã vượt qua.streamed
truyền trực tuyến đầu ra stdout/stderr từ mỗi bài kiểm thử theo thời gian thực.
--java_debug
Lựa chọn này khiến máy ảo Java của một kiểm thử Java chờ kết nối từ một trình gỡ lỗi tuân thủ JDWP trước khi bắt đầu kiểm thử. Tuỳ chọn này ngụ ý --test_output=streamed
.
--[no]verbose_test_summary
Theo mặc định, tuỳ chọn này được bật, khiến thời gian kiểm thử và các thông tin bổ sung khác (chẳng hạn như số lần kiểm thử) được in vào bản tóm tắt kiểm thử. Nếu bạn chỉ định --noverbose_test_summary
, bản tóm tắt kiểm thử sẽ chỉ bao gồm tên kiểm thử, trạng thái kiểm thử và chỉ báo kiểm thử được lưu vào bộ nhớ đệm, đồng thời sẽ được định dạng để nằm trong phạm vi 80 ký tự khi có thể.
--test_tmpdir=path
Chỉ định thư mục tạm thời cho các quy trình kiểm thử được thực thi cục bộ. Mỗi bài kiểm thử sẽ được thực thi trong một thư mục con riêng biệt bên trong thư mục này. Thư mục này sẽ được dọn dẹp khi bắt đầu mỗi lệnh bazel test
.
Theo mặc định, bazel sẽ đặt thư mục này trong thư mục cơ sở đầu ra của Bazel.
--test_timeout=seconds
HOẶC --test_timeout=seconds,seconds,seconds,seconds
Ghi đè giá trị thời gian chờ cho tất cả các bài kiểm thử bằng cách sử dụng số giây đã chỉ định làm giá trị thời gian chờ mới. Nếu chỉ có một giá trị được cung cấp, thì giá trị đó sẽ được dùng cho tất cả các danh mục thời gian chờ kiểm thử.
Ngoài ra, bạn có thể cung cấp 4 giá trị được phân tách bằng dấu phẩy, chỉ định thời gian chờ riêng lẻ cho các kiểm thử ngắn, trung bình, dài và vĩnh viễn (theo thứ tự đó). Ở cả hai dạng, giá trị bằng 0 hoặc giá trị âm cho bất kỳ kích thước kiểm thử nào sẽ được thay thế bằng thời gian chờ mặc định cho các danh mục thời gian chờ đã cho theo định nghĩa của trang Viết các bài kiểm thử. Theo mặc định, Bazel sẽ sử dụng các thời gian chờ này cho tất cả các bài kiểm thử bằng cách suy luận giới hạn thời gian chờ từ kích thước của bài kiểm thử, cho dù kích thước đó được đặt một cách ngầm định hay rõ ràng.
Những kiểm thử nêu rõ danh mục thời gian chờ riêng biệt với kích thước sẽ nhận được giá trị tương tự như khi thời gian chờ đó được đặt ngầm định bằng thẻ kích thước. Vì vậy, một kiểm thử có kích thước "nhỏ" khai báo thời gian chờ "dài" sẽ có cùng thời gian chờ hiệu quả mà một kiểm thử "lớn" có mà không có thời gian chờ rõ ràng.
--test_arg=arg
Truyền các tuỳ chọn/cờ/đối số dòng lệnh đến từng quy trình kiểm thử. Bạn có thể sử dụng lựa chọn này nhiều lần để truyền một số đối số. Ví dụ: --test_arg=--logtostderr --test_arg=--v=3
.
Xin lưu ý rằng không giống như lệnh bazel run
, bạn không thể truyền trực tiếp các đối số kiểm thử như trong bazel test -- target --logtostderr --v=3
. Đó là do các đối số không liên quan được truyền đến bazel test
sẽ được diễn giải là các mục tiêu kiểm thử bổ sung. Tức là --logtostderr
và --v=3
sẽ được diễn giải là mục tiêu kiểm thử. Sự mơ hồ này không tồn tại đối với lệnh bazel run
, lệnh này chỉ chấp nhận một mục tiêu.
--test_arg
có thể được truyền đến lệnh bazel run
, nhưng lệnh này sẽ bị bỏ qua trừ phi mục tiêu đang chạy là mục tiêu kiểm thử. (Tương tự như mọi cờ khác, nếu được truyền trong lệnh bazel run
sau mã thông báo --
, thì cờ này sẽ không được Bazel xử lý mà được chuyển tiếp nguyên văn đến mục tiêu được thực thi.)
--test_env=variable=_value_
HOẶC --test_env=variable
Chỉ định các biến bổ sung phải được chèn vào môi trường kiểm thử cho mỗi kiểm thử. Nếu bạn không chỉ định value, thì giá trị này sẽ được kế thừa từ môi trường shell dùng để khởi động lệnh bazel test
.
Bạn có thể truy cập vào môi trường này từ bên trong một quy trình kiểm thử bằng cách sử dụng System.getenv("var")
(Java), getenv("var")
(C hoặc C++),
--run_under=command-prefix
Điều này chỉ định một tiền tố mà trình chạy kiểm thử sẽ chèn vào trước lệnh kiểm thử trước khi chạy lệnh đó. command-prefix được chia thành các từ bằng cách sử dụng các quy tắc mã hoá thành mã thông báo của Bourne shell, sau đó danh sách từ được thêm vào trước lệnh sẽ được thực thi.
Nếu từ đầu tiên là một nhãn đủ điều kiện (bắt đầu bằng //
), thì nhãn đó sẽ được tạo. Sau đó, nhãn sẽ được thay thế bằng vị trí thực thi tương ứng được thêm vào trước lệnh sẽ được thực thi cùng với các từ khác.
Có một số lưu ý sau đây:
- PATH dùng để chạy các bài kiểm thử có thể khác với PATH trong môi trường của bạn, vì vậy, bạn có thể cần dùng đường dẫn tuyệt đối cho lệnh
--run_under
(từ đầu tiên trong command-prefix). stdin
chưa kết nối, nên bạn không thể dùng--run_under
cho các lệnh tương tác.
Ví dụ:
--run_under=/usr/bin/strace --run_under='/usr/bin/strace -c' --run_under=/usr/bin/valgrind --run_under='/usr/bin/valgrind --quiet --num-callers=20'
Lựa chọn kiểm thử
Như được ghi lại trong phần Các lựa chọn đầu ra, bạn có thể lọc các kiểm thử theo kích thước, thời gian chờ, thẻ hoặc ngôn ngữ. Bộ lọc tên chung thuận tiện có thể chuyển tiếp các đối số bộ lọc cụ thể đến trình chạy kiểm thử.
Các lựa chọn khác cho bazel test
Cú pháp và các lựa chọn còn lại hoàn toàn giống với bazel build
.
Chạy tệp thực thi
Lệnh bazel run
tương tự như bazel build
, ngoại trừ việc lệnh này được dùng để tạo và chạy một mục tiêu duy nhất. Sau đây là một phiên điển hình (//java/myapp:myapp
chào và in các đối số của nó):
% bazel run java/myapp:myapp -- --arg1 --arg2 INFO: Analyzed target //java/myapp:myapp (13 packages loaded, 27 targets configured). INFO: Found 1 target... Target //java/myapp:myapp up-to-date: bazel-bin/java/myapp/myapp INFO: Elapsed time: 14.290s, Critical Path: 5.54s, ... INFO: Build completed successfully, 4 total actions INFO: Running command line: bazel-bin/java/myapp/myapp <args omitted> Hello there $EXEC_ROOT/java/myapp/myapp --arg1 --arg2
bazel run
tương tự nhưng không giống hệt với việc gọi trực tiếp tệp nhị phân do Bazel tạo và hành vi của tệp nhị phân này sẽ khác nhau tuỳ thuộc vào việc tệp nhị phân được gọi có phải là một quy trình kiểm thử hay không.
Khi tệp nhị phân không phải là một bài kiểm thử, thư mục đang hoạt động hiện tại sẽ là cây runfiles của tệp nhị phân.
Khi tệp nhị phân là một bài kiểm thử, thư mục đang hoạt động hiện tại sẽ là thư mục gốc thực thi và hệ thống sẽ cố gắng hết sức để sao chép môi trường mà các bài kiểm thử thường chạy. Tuy nhiên, hoạt động mô phỏng này không hoàn hảo và các kiểm thử có nhiều phân đoạn không thể chạy theo cách này (bạn có thể dùng lựa chọn dòng lệnh --test_sharding_strategy=disabled
để giải quyết vấn đề này)
Các biến môi trường bổ sung sau đây cũng có sẵn cho tệp nhị phân:
BUILD_WORKSPACE_DIRECTORY
: gốc của không gian làm việc nơi quá trình tạo được chạy.BUILD_WORKING_DIRECTORY
: thư mục đang hoạt động hiện tại nơi Bazel được chạy.BUILD_ID
: mã nhận dạng bản dựng của lệnh gọibazel run
. Thường thì đây là một giá trị duy nhất, trừ phi Bazel được chạy bằng--script_path
và tập lệnh kết quả được dùng lại.BUILD_EXECROOT
: thư mục gốc thực thi của lệnh gọibazel run
.
Ví dụ: bạn có thể dùng các tệp này để diễn giải tên tệp trên dòng lệnh theo cách thân thiện với người dùng.
Tùy chọn cho bazel run
--run_under=command-prefix
Lựa chọn này có tác dụng tương tự như lựa chọn --run_under
cho bazel test
(xem ở trên), ngoại trừ việc lựa chọn này áp dụng cho lệnh do bazel
run
chạy thay vì cho các kiểm thử do bazel test
chạy và không thể chạy trong nhãn.
Lọc kết quả ghi nhật ký từ Bazel
Khi gọi một tệp nhị phân bằng bazel run
, Bazel sẽ in đầu ra ghi nhật ký từ chính Bazel và tệp nhị phân đang được gọi. Để giảm bớt lượng thông tin trong nhật ký, bạn có thể chặn các đầu ra từ chính Bazel bằng cờ --ui_event_filters
và --noshow_progress
.
Ví dụ:
bazel run --ui_event_filters=-info,-stdout,-stderr --noshow_progress //java/myapp:myapp
Thực hiện kiểm thử
bazel run
cũng có thể thực thi các tệp nhị phân kiểm thử, có tác dụng chạy kiểm thử trong môi trường gần giống với môi trường được mô tả tại Viết kiểm thử. Xin lưu ý rằng không có đối số --test_*
nào có hiệu lực khi chạy thử nghiệm theo cách này, ngoại trừ --test_arg
.
Dọn dẹp đầu ra bản dựng
Lệnh clean
Bazel có một lệnh clean
, tương tự như lệnh của Make.
Lệnh này sẽ xoá các thư mục đầu ra cho tất cả cấu hình bản dựng do phiên bản Bazel này thực hiện, hoặc toàn bộ cây công việc do phiên bản Bazel này tạo và đặt lại bộ nhớ đệm nội bộ. Nếu được thực thi mà không có bất kỳ lựa chọn nào trên dòng lệnh, thì thư mục đầu ra cho tất cả các cấu hình sẽ được dọn dẹp.
Xin lưu ý rằng mỗi phiên bản Bazel đều được liên kết với một không gian làm việc duy nhất, do đó, lệnh clean
sẽ xoá tất cả đầu ra của mọi bản dựng mà bạn đã thực hiện bằng phiên bản Bazel đó trong không gian làm việc đó.
Để xoá hoàn toàn cây công việc do một phiên bản Bazel tạo, bạn có thể chỉ định lựa chọn --expunge
. Khi được thực thi bằng --expunge
, lệnh clean (dọn dẹp) chỉ cần xoá toàn bộ cây cơ sở đầu ra. Ngoài đầu ra bản dựng, cây này còn chứa tất cả các tệp tạm thời do Bazel tạo. Lệnh này cũng dừng máy chủ Bazel sau khi dọn dẹp, tương đương với lệnh shutdown
. Ví dụ: để dọn dẹp tất cả dấu vết trên đĩa và bộ nhớ của một phiên bản Bazel, bạn có thể chỉ định:
% bazel clean --expunge
Ngoài ra, bạn có thể xoá vĩnh viễn ở chế độ nền bằng cách sử dụng --expunge_async
. Bạn có thể gọi một lệnh Bazel trong cùng một ứng dụng một cách an toàn trong khi lệnh xoá không đồng bộ vẫn tiếp tục chạy.
Lệnh clean
chủ yếu được cung cấp như một phương tiện để giải phóng dung lượng ổ đĩa cho những không gian làm việc không còn cần thiết nữa.
Quá trình tạo lại gia tăng của Bazel có thể không hoàn hảo, vì vậy, bạn có thể sử dụng clean
để khôi phục trạng thái nhất quán khi gặp vấn đề.
Thiết kế của Bazel là những vấn đề này có thể khắc phục được và những lỗi này là ưu tiên cao cần được khắc phục. Nếu bạn phát hiện thấy một bản dựng gia tăng không chính xác, hãy gửi báo cáo lỗi và báo cáo lỗi trong các công cụ thay vì sử dụng clean
.
Truy vấn biểu đồ phần phụ thuộc
Bazel có một ngôn ngữ truy vấn để đặt câu hỏi về biểu đồ phần phụ thuộc được dùng trong quá trình tạo. Ngôn ngữ truy vấn được dùng bởi hai lệnh: query và cquery. Điểm khác biệt chính giữa hai lệnh này là truy vấn chạy sau giai đoạn tải và cquery chạy sau giai đoạn phân tích. Những công cụ này là một trợ thủ vô giá cho nhiều nhiệm vụ kỹ thuật phần mềm.
Ngôn ngữ truy vấn dựa trên ý tưởng về các phép toán đại số trên biểu đồ; ngôn ngữ này được ghi lại chi tiết trong
Tài liệu tham khảo về truy vấn Bazel. Vui lòng tham khảo tài liệu đó để biết thông tin tham khảo, ví dụ và các tuỳ chọn dòng lệnh dành riêng cho truy vấn.
Công cụ truy vấn chấp nhận một số lựa chọn dòng lệnh. --output
chọn định dạng đầu ra.
--[no]keep_going
(theo mặc định là tắt) khiến công cụ truy vấn tiếp tục tiến hành khi gặp lỗi; bạn có thể tắt hành vi này nếu không chấp nhận kết quả không đầy đủ trong trường hợp có lỗi.
Tuỳ chọn --[no]tool_deps
(được bật theo mặc định) khiến các phần phụ thuộc trong cấu hình không phải mục tiêu được đưa vào biểu đồ phần phụ thuộc mà truy vấn hoạt động.
Tuỳ chọn --[no]implicit_deps
(được bật theo mặc định) khiến các phần phụ thuộc ngầm được đưa vào biểu đồ phần phụ thuộc mà truy vấn hoạt động. Phần phụ thuộc ngầm ẩn là phần phụ thuộc không được chỉ định rõ ràng trong tệp BUILD nhưng được bazel thêm vào.
Ví dụ: "Hiện vị trí của các định nghĩa (trong tệp BUILD) của tất cả genrule cần thiết để tạo tất cả các kiểm thử trong cây PEBL."
bazel query --output location 'kind(genrule, deps(kind(".*_test rule", foo/bar/pebl/...)))'
Truy vấn biểu đồ hành động
Lệnh aquery
cho phép bạn truy vấn các thao tác trong biểu đồ bản dựng.
Công cụ này hoạt động trên biểu đồ mục tiêu đã định cấu hình sau phân tích và hiển thị thông tin về các thao tác, cấu phần phần mềm và mối quan hệ giữa chúng.
Công cụ này chấp nhận một số lựa chọn dòng lệnh.
--output
chọn định dạng đầu ra. Định dạng đầu ra mặc định (text
) là định dạng con người có thể đọc được, hãy dùng proto
hoặc textproto
cho định dạng máy có thể đọc được.
Đáng chú ý là lệnh aquery chạy trên một bản dựng Bazel thông thường và kế thừa tập hợp các lựa chọn có sẵn trong quá trình tạo bản dựng.
Thư viện này hỗ trợ cùng một nhóm hàm cũng có sẵn cho query
truyền thống nhưng siblings
, buildfiles
và tests
.
Để biết thêm thông tin chi tiết, hãy xem phần Truy vấn biểu đồ hành động.
Các lệnh và tuỳ chọn khác
help
Lệnh help
cung cấp trợ giúp trực tuyến. Theo mặc định, lệnh này sẽ cho thấy bản tóm tắt các lệnh và chủ đề trợ giúp có sẵn, như minh hoạ trong phần Xây dựng bằng Bazel.
Việc chỉ định một đối số sẽ hiển thị thông tin trợ giúp chi tiết cho một chủ đề cụ thể. Hầu hết các chủ đề đều là lệnh Bazel, chẳng hạn như build
hoặc query
, nhưng có một số chủ đề trợ giúp bổ sung không tương ứng với các lệnh.
--[no]long
(-l
)
Theo mặc định, bazel help [topic]
chỉ in bản tóm tắt các lựa chọn liên quan cho một chủ đề. Nếu bạn chỉ định lựa chọn --long
, thì loại, giá trị mặc định và nội dung mô tả đầy đủ của từng lựa chọn cũng sẽ được in.
shutdown
Bạn có thể dừng các quy trình của máy chủ Bazel bằng lệnh shutdown
. Lệnh này khiến máy chủ Bazel thoát ngay khi ở trạng thái rảnh (ví dụ: sau khi hoàn tất mọi bản dựng hoặc lệnh khác đang diễn ra). Để biết thêm thông tin, hãy xem phần Triển khai ứng dụng/máy chủ.
Các máy chủ Bazel sẽ tự động dừng sau khi hết thời gian chờ không hoạt động, vì vậy, bạn hiếm khi cần dùng lệnh này; tuy nhiên, lệnh này có thể hữu ích trong các tập lệnh khi bạn biết rằng sẽ không có bản dựng nào khác trong một không gian làm việc nhất định.
shutdown
chấp nhận một lựa chọn là --iff_heap_size_greater_than _n_
, lựa chọn này yêu cầu một đối số số nguyên (tính bằng MB). Nếu được chỉ định, điều này sẽ khiến quá trình tắt máy phụ thuộc vào lượng bộ nhớ đã tiêu thụ. Điều này hữu ích cho các tập lệnh khởi tạo nhiều bản dựng, vì mọi rò rỉ bộ nhớ trong máy chủ Bazel đều có thể khiến máy chủ này thỉnh thoảng gặp sự cố một cách giả tạo; việc thực hiện khởi động lại có điều kiện sẽ ngăn chặn tình trạng này.
info
Lệnh info
in nhiều giá trị được liên kết với phiên bản máy chủ Bazel hoặc với một cấu hình bản dựng cụ thể.
(Các tệp này có thể được dùng bởi những tập lệnh điều khiển bản dựng.)
Lệnh info
cũng cho phép một đối số duy nhất (không bắt buộc), đó là tên của một trong các khoá trong danh sách bên dưới.
Trong trường hợp này, bazel info key
sẽ chỉ in giá trị cho một khoá đó. (Điều này đặc biệt thuận tiện khi viết kịch bản Bazel, vì bạn không cần chuyển kết quả qua sed -ne /key:/s/key://p
:
Dữ liệu độc lập với cấu hình
release
: nhãn phát hành cho phiên bản Bazel này hoặc "phiên bản phát triển" nếu đây không phải là một tệp nhị phân đã phát hành.workspace
đường dẫn tuyệt đối đến thư mục không gian làm việc cơ sở.install_base
: đường dẫn tuyệt đối đến thư mục cài đặt mà phiên bản Bazel này dùng cho người dùng hiện tại. Bazel cài đặt các tệp thực thi bắt buộc nội bộ bên dưới thư mục này.output_base
: đường dẫn tuyệt đối đến thư mục đầu ra cơ sở mà phiên bản Bazel này dùng cho tổ hợp người dùng và không gian làm việc hiện tại. Bazel đặt tất cả các đầu ra tạm thời và đầu ra bản dựng bên dưới thư mục này.execution_root
: đường dẫn tuyệt đối đến thư mục gốc thực thi trong output_base. Thư mục này là thư mục gốc cho tất cả các tệp mà các lệnh có thể truy cập được trong quá trình tạo và là thư mục đang hoạt động cho các lệnh đó. Nếu thư mục không gian làm việc có thể ghi, thì một symlink có tênbazel-<workspace>
sẽ được đặt ở đó, trỏ đến thư mục này.output_path
: đường dẫn tuyệt đối đến thư mục đầu ra bên dưới thư mục gốc thực thi được dùng cho tất cả các tệp thực sự được tạo do các lệnh tạo bản dựng. Nếu thư mục không gian làm việc có thể ghi, thì một symlink có tênbazel-out
sẽ được đặt ở đó, trỏ đến thư mục này.server_pid
: mã nhận dạng quy trình của quy trình máy chủ Bazel.server_log
: đường dẫn tuyệt đối đến tệp nhật ký gỡ lỗi của máy chủ Bazel. Tệp này chứa thông tin gỡ lỗi cho tất cả các lệnh trong suốt thời gian hoạt động của máy chủ Bazel và dành cho nhà phát triển Bazel và người dùng thành thạo.command_log
: đường dẫn tuyệt đối đến tệp nhật ký lệnh; tệp này chứa các luồng stdout và stderr xen kẽ của lệnh Bazel gần đây nhất. Xin lưu ý rằng việc chạybazel info
sẽ ghi đè nội dung của tệp này, vì sau đó tệp này sẽ trở thành lệnh Bazel gần đây nhất. Tuy nhiên, vị trí của tệp nhật ký lệnh sẽ không thay đổi trừ phi bạn thay đổi chế độ cài đặt của tuỳ chọn--output_base
hoặc--output_user_root
.used-heap-size
,committed-heap-size
,max-heap-size
: báo cáo nhiều thông số về kích thước vùng nhớ heap của JVM. Tương ứng: bộ nhớ hiện đang được sử dụng, bộ nhớ hiện được đảm bảo có sẵn cho JVM từ hệ thống, mức phân bổ tối đa có thể.gc-count
,gc-time
: Số lượng tích luỹ của các lần thu gom rác kể từ khi bắt đầu máy chủ Bazel này và thời gian đã dùng để thực hiện các lần thu gom đó. Xin lưu ý rằng các giá trị này không được đặt lại khi bắt đầu mỗi bản dựng.package_path
: Danh sách các đường dẫn được phân tách bằng dấu hai chấm mà bazel sẽ tìm kiếm các gói. Có cùng định dạng với đối số dòng lệnh bản dựng--package_path
.
Ví dụ: mã nhận dạng quy trình của máy chủ Bazel.
% bazel info server_pid 1285
Dữ liệu dành riêng cho cấu hình
Những dữ liệu này có thể bị ảnh hưởng bởi các lựa chọn cấu hình được truyền đến bazel info
, chẳng hạn như --cpu
, --compilation_mode
, v.v. Lệnh info
chấp nhận tất cả các lựa chọn kiểm soát việc phân tích phần phụ thuộc, vì một số lựa chọn trong số này xác định vị trí của thư mục đầu ra của bản dựng, lựa chọn trình biên dịch, v.v.
bazel-bin
,bazel-testlogs
,bazel-genfiles
: báo cáo đường dẫn tuyệt đối đến các thư mụcbazel-*
mà các chương trình do bản dựng tạo ra nằm trong đó. Thường thì (nhưng không phải lúc nào cũng vậy) đường dẫn này giống với các đường liên kết tượng trưngbazel-*
được tạo trong thư mục không gian làm việc cơ sở sau khi quá trình tạo thành công. Tuy nhiên, nếu thư mục không gian làm việc ở chế độ chỉ đọc, thì bạn không thể tạo bất kỳ đường liên kết tượng trưngbazel-*
nào. Các tập lệnh sử dụng giá trị dobazel info
báo cáo (thay vì giả định sự tồn tại của symlink) sẽ mạnh mẽ hơn.- Môi trường "Make" hoàn chỉnh. Nếu bạn chỉ định cờ
--show_make_env
, tất cả các biến trong môi trường "Make" (Tạo) của cấu hình hiện tại cũng sẽ xuất hiện (chẳng hạn nhưCC
,GLIBC_VERSION
, v.v.). Đây là các biến được truy cập bằng cú pháp$(CC)
hoặcvarref("CC")
bên trong tệp BUILD.
Ví dụ: trình biên dịch C++ cho cấu hình hiện tại.
Đây là biến $(CC)
trong môi trường "Make", nên cần có cờ --show_make_env
.
% bazel info --show_make_env -c opt COMPILATION_MODE opt
Ví dụ: thư mục đầu ra bazel-bin
cho cấu hình hiện tại. Điều này đảm bảo tính chính xác ngay cả trong trường hợp không thể tạo symlink bazel-bin
vì một lý do nào đó (chẳng hạn như nếu bạn đang tạo từ một thư mục chỉ đọc).
% bazel info --cpu=piii bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/piii-opt/bin % bazel info --cpu=k8 bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/k8-opt/bin
version
và --version
Lệnh version in thông tin chi tiết về phiên bản của tệp nhị phân Bazel đã tạo, bao gồm cả danh sách thay đổi mà tệp nhị phân đó được tạo và ngày tạo. Những thông tin này đặc biệt hữu ích trong việc xác định xem bạn có Bazel mới nhất hay không hoặc nếu bạn đang báo cáo lỗi. Một số giá trị thú vị là:
changelist
: danh sách thay đổi mà phiên bản Bazel này được phát hành.label
: nhãn phát hành cho phiên bản Bazel này hoặc "phiên bản phát triển" nếu đây không phải là một tệp nhị phân đã phát hành. Rất hữu ích khi báo cáo lỗi.
bazel --version
, không có đối số nào khác, sẽ phát ra cùng một đầu ra như bazel version --gnu_format
, ngoại trừ việc không có tác dụng phụ là có khả năng khởi động máy chủ Bazel hoặc giải nén kho lưu trữ máy chủ. Bạn có thể chạy bazel --version
ở bất cứ đâu – công cụ này không yêu cầu thư mục không gian làm việc.
mobile-install
Lệnh mobile-install
cài đặt ứng dụng vào thiết bị di động.
Hiện tại, chỉ các thiết bị Android chạy ART mới được hỗ trợ.
Hãy xem bazel mobile-install để biết thêm thông tin.
Các lựa chọn sau được hỗ trợ:
--incremental
Nếu được đặt, Bazel sẽ cố gắng cài đặt ứng dụng theo gia số, tức là chỉ những phần đã thay đổi kể từ bản dựng gần đây nhất. Thao tác này không thể cập nhật các tài nguyên được tham chiếu từ AndroidManifest.xml
, mã gốc hoặc tài nguyên Java (chẳng hạn như những tài nguyên được Class.getResource()
tham chiếu). Nếu những tài nguyên này thay đổi, bạn phải bỏ qua lựa chọn này. Ngược lại với tinh thần của Bazel và do những hạn chế của nền tảng Android, người dùng có trách nhiệm biết khi nào lệnh này đủ tốt và khi nào cần cài đặt đầy đủ.
Nếu bạn đang sử dụng thiết bị chạy Marshmallow trở lên, hãy cân nhắc dùng cờ --split_apks
.
--split_apks
Có nên dùng APK phân tách để cài đặt và cập nhật ứng dụng trên thiết bị hay không.
Chỉ hoạt động với các thiết bị chạy Marshmallow trở lên. Xin lưu ý rằng bạn không cần dùng cờ --incremental
khi sử dụng --split_apks
.
--start_app
Khởi động ứng dụng ở trạng thái mới sau khi cài đặt. Tương đương với --start=COLD
.
--debug_app
Chờ trình gỡ lỗi được đính kèm trước khi khởi động ứng dụng ở trạng thái mới sau khi cài đặt.
Tương đương với --start=DEBUG
.
--start=_start_type_
Cách khởi động ứng dụng sau khi cài đặt. Các _start_type_ được hỗ trợ là:
NO
Không khởi động ứng dụng. Đây là lựa chọn mặc định.COLD
Khởi động ứng dụng ở trạng thái ban đầu sau khi cài đặt.WARM
Lưu giữ và khôi phục trạng thái ứng dụng trên các lượt cài đặt gia tăng.DEBUG
Chờ trình gỡ lỗi trước khi khởi động ứng dụng ở trạng thái mới sau khi cài đặt.
--adb=path
Cho biết tệp nhị phân adb
sẽ được sử dụng.
Theo mặc định, bạn sẽ sử dụng adb trong Android SDK do --android_sdk
chỉ định.
--adb_arg=serial
Các đối số bổ sung cho adb
. Các đối số này xuất hiện trước lệnh phụ trong dòng lệnh và thường được dùng để chỉ định thiết bị cần cài đặt.
Ví dụ: để chọn thiết bị Android hoặc trình mô phỏng cần dùng:
% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef
kích hoạt adb
dưới dạng
adb -s deadbeef install ...
--incremental_install_verbosity=number
Mức độ chi tiết cho quá trình cài đặt gia tăng. Đặt thành 1 để nhật ký gỡ lỗi được in ra bảng điều khiển.
dump
Lệnh dump
sẽ in vào stdout một bản kết xuất trạng thái nội bộ của máy chủ Bazel. Lệnh này chủ yếu dành cho các nhà phát triển Bazel sử dụng, vì vậy, đầu ra của lệnh này không được chỉ định và có thể thay đổi.
Theo mặc định, lệnh này sẽ chỉ in thông báo trợ giúp nêu rõ các lựa chọn có thể để kết xuất các khu vực cụ thể của trạng thái Bazel. Để kết xuất trạng thái nội bộ, bạn phải chỉ định ít nhất một trong các lựa chọn.
Các lựa chọn sau được hỗ trợ:
--action_cache
kết xuất nội dung bộ nhớ đệm của thao tác.--packages
kết xuất nội dung bộ nhớ đệm của gói.--skyframe
kết xuất trạng thái của biểu đồ phần phụ thuộc Bazel nội bộ.--rules
kết xuất thông tin tóm tắt về quy tắc cho từng quy tắc và lớp khía cạnh, bao gồm cả số lượng và số lượng hành động. Điều này áp dụng cho cả quy tắc gốc và quy tắc Starlark. Nếu bạn bật tính năng theo dõi bộ nhớ, thì mức tiêu thụ bộ nhớ của các quy tắc cũng sẽ được in.--skylark_memory
kết xuất một tệp .gz tương thích với pprof vào đường dẫn đã chỉ định. Bạn phải bật tính năng theo dõi bộ nhớ để tính năng này hoạt động.
Theo dõi bộ nhớ
Một số lệnh dump
yêu cầu theo dõi bộ nhớ. Để bật tính năng này, bạn phải truyền cờ khởi động đến Bazel:
--host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.4.jar
--host_jvm_args=-DRULE_MEMORY_TRACKER=1
java-agent được kiểm tra trong Bazel tại third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.4.jar
, vì vậy, hãy nhớ điều chỉnh $BAZEL
cho phù hợp với nơi bạn lưu trữ kho lưu trữ Bazel.
Đừng quên tiếp tục truyền các lựa chọn này đến Bazel cho mọi lệnh, nếu không máy chủ sẽ khởi động lại.
Ví dụ:
% bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.4.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ build --nobuild <targets> # Dump rules % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.4.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ dump --rules # Dump Starlark heap and analyze it with pprof % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.4.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ dump --skylark_memory=$HOME/prof.gz % pprof -flame $HOME/prof.gz
analyze-profile
Lệnh analyze-profile
phân tích hồ sơ dấu vết JSON đã được thu thập trước đó trong quá trình gọi Bazel.
canonicalize-flags
Lệnh canonicalize-flags
, lấy danh sách các lựa chọn cho một lệnh Bazel và trả về danh sách các lựa chọn có cùng hiệu ứng. Danh sách các lựa chọn mới là danh sách chuẩn. Ví dụ: hai danh sách lựa chọn có cùng hiệu ứng sẽ được chuẩn hoá thành cùng một danh sách mới.
Bạn có thể dùng lựa chọn --for_command
để chọn giữa các lệnh khác nhau. Hiện tại, chỉ có build
và test
được hỗ trợ. Các lựa chọn mà lệnh đã cho không hỗ trợ sẽ gây ra lỗi.
Ví dụ:
% bazel canonicalize-flags -- --config=any_name --test_tag_filters="-lint" --config=any_name --test_tag_filters=-lint
Lựa chọn khởi động
Các lựa chọn được mô tả trong phần này ảnh hưởng đến quá trình khởi động máy ảo Java mà quy trình máy chủ Bazel sử dụng và các lựa chọn này áp dụng cho tất cả các lệnh tiếp theo do máy chủ đó xử lý. Nếu có một máy chủ Bazel đang chạy và các lựa chọn khởi động không khớp, thì máy chủ đó sẽ được khởi động lại.
Bạn phải chỉ định tất cả các lựa chọn được mô tả trong phần này bằng cú pháp --key=value
hoặc --key value
. Ngoài ra, các lựa chọn này phải xuất hiện trước tên của lệnh Bazel. Sử dụng startup --key=value
để liệt kê các tệp này trong tệp .bazelrc
.
--output_base=dir
Tuỳ chọn này yêu cầu một đối số đường dẫn, đối số này phải chỉ định một thư mục có thể ghi. Bazel sẽ dùng vị trí này để ghi tất cả đầu ra. Cơ sở đầu ra cũng là khoá mà ứng dụng sẽ dùng để xác định vị trí của máy chủ Bazel. Bằng cách thay đổi cơ sở đầu ra, bạn sẽ thay đổi máy chủ xử lý lệnh.
Theo mặc định, cơ sở đầu ra được lấy từ tên đăng nhập của người dùng và tên của thư mục không gian làm việc (thực tế là bản tóm tắt MD5 của thư mục đó), vì vậy, một giá trị điển hình sẽ có dạng như sau: /var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e
.
Ví dụ:
OUTPUT_BASE=/var/tmp/google/_bazel_johndoe/custom_output_base % bazel --output_base ${OUTPUT_BASE}1 build //foo & bazel --output_base ${OUTPUT_BASE}2 build //bar
Trong lệnh này, hai lệnh Bazel chạy đồng thời (do toán tử &
của trình bao), mỗi lệnh sử dụng một phiên bản máy chủ Bazel riêng (do các cơ sở đầu ra khác nhau).
Ngược lại, nếu cơ sở đầu ra mặc định được dùng trong cả hai lệnh, thì cả hai yêu cầu sẽ được gửi đến cùng một máy chủ, máy chủ này sẽ xử lý các yêu cầu theo trình tự: trước tiên là tạo //foo
, sau đó là tạo //bar
gia tăng.
--output_user_root=dir
Trỏ đến thư mục gốc nơi tạo ra đầu ra và cơ sở cài đặt. Thư mục không được tồn tại hoặc thuộc sở hữu của người dùng gọi. Trước đây, bạn được phép trỏ đến một thư mục dùng chung giữa nhiều người dùng nhưng hiện tại thì không được phép nữa. Điều này có thể được cho phép sau khi vấn đề 11100 được giải quyết.
Nếu bạn chỉ định lựa chọn --output_base
, lựa chọn này sẽ ghi đè việc sử dụng --output_user_root
để tính toán cơ sở đầu ra.
Vị trí của cơ sở cài đặt được tính dựa trên --output_user_root
, cộng với danh tính MD5 của các tệp nhị phân được nhúng Bazel.
Bạn có thể dùng lựa chọn --output_user_root
để chọn một vị trí cơ sở thay thế cho tất cả đầu ra của Bazel (cơ sở cài đặt và cơ sở đầu ra) nếu có một vị trí tốt hơn trong bố cục hệ thống tệp của bạn.
--server_javabase=dir
Chỉ định máy ảo Java mà chính Bazel chạy. Giá trị này phải là đường dẫn đến thư mục chứa JDK hoặc JRE. Đó không được là nhãn. Tuỳ chọn này phải xuất hiện trước mọi lệnh Bazel, ví dụ:
% bazel --server_javabase=/usr/local/buildtools/java/jdk build //foo
Cờ này không ảnh hưởng đến các JVM mà các quy trình con Bazel sử dụng, chẳng hạn như ứng dụng, kiểm thử, công cụ, v.v. Thay vào đó, hãy sử dụng các lựa chọn xây dựng --javabase hoặc --host_javabase.
Cờ này trước đây có tên là --host_javabase
(đôi khi được gọi là --host_javabase
"phía bên trái"), nhưng đã được đổi tên để tránh nhầm lẫn với cờ bản dựng --host_javabase (đôi khi được gọi là --host_javabase
"phía bên phải").
--host_jvm_args=string
Chỉ định một lựa chọn khởi động sẽ được truyền đến máy ảo Java mà chính Bazel chạy. Bạn có thể dùng cách này để đặt kích thước ngăn xếp, ví dụ:
% bazel --host_jvm_args="-Xss256K" build //foo
Bạn có thể sử dụng lựa chọn này nhiều lần với các đối số riêng lẻ. Xin lưu ý rằng bạn hiếm khi cần đặt cờ này. Bạn cũng có thể truyền một danh sách các chuỗi được phân tách bằng dấu cách, mỗi chuỗi sẽ được diễn giải là một đối số JVM riêng biệt, nhưng tính năng này sẽ sớm không được dùng nữa.
Điều này không ảnh hưởng đến bất kỳ JVM nào mà các quy trình con của Bazel sử dụng: ứng dụng, kiểm thử, công cụ, v.v. Để truyền các lựa chọn JVM đến các chương trình Java có thể thực thi, cho dù được chạy bằng bazel
run
hay trên dòng lệnh, bạn nên sử dụng đối số --jvm_flags
mà tất cả các chương trình java_binary
và java_test
đều hỗ trợ. Hoặc sử dụng bazel test --test_arg=--jvm_flags=foo ...
cho các bài kiểm tra.
--host_jvm_debug
Lựa chọn này khiến máy ảo Java đợi kết nối từ một trình gỡ lỗi tuân thủ JDWP trước khi gọi phương thức chính của chính Bazel. Đây là tính năng chủ yếu dành cho nhà phát triển Bazel.
--autodetect_server_javabase
Lựa chọn này khiến Bazel tự động tìm kiếm một JDK đã cài đặt khi khởi động và quay lại JRE đã cài đặt nếu JRE được nhúng không có sẵn.
Bạn có thể dùng --explicit_server_javabase
để chọn một JRE cụ thể để chạy Bazel.
--batch
Chế độ hàng loạt khiến Bazel không sử dụng chế độ máy chủ/máy khách tiêu chuẩn, mà thay vào đó chạy một quy trình bazel java cho một lệnh duy nhất. Quy trình này đã được dùng cho ngữ nghĩa dễ dự đoán hơn liên quan đến việc xử lý tín hiệu, kiểm soát công việc và kế thừa biến môi trường, đồng thời cần thiết để chạy bazel trong một chroot jail.
Chế độ hàng loạt duy trì ngữ nghĩa xếp hàng thích hợp trong cùng một output_base. Tức là các lệnh gọi đồng thời sẽ được xử lý theo thứ tự, không trùng lặp. Nếu Bazel ở chế độ hàng loạt chạy trên một máy khách có máy chủ đang chạy, thì trước tiên, Bazel sẽ huỷ máy chủ trước khi xử lý lệnh.
Bazel sẽ chạy chậm hơn ở chế độ hàng loạt hoặc với các lựa chọn thay thế được mô tả ở trên. Điều này là do, trong số những thứ khác, bộ nhớ đệm của tệp bản dựng nằm trong bộ nhớ, vì vậy, bộ nhớ đệm này không được giữ lại giữa các lệnh gọi hàng loạt tuần tự. Do đó, việc sử dụng chế độ hàng loạt thường hợp lý hơn trong những trường hợp hiệu suất ít quan trọng, chẳng hạn như các bản dựng liên tục.
--max_idle_secs=n
Lựa chọn này chỉ định thời gian (tính bằng giây) mà quy trình máy chủ Bazel sẽ chờ sau yêu cầu cuối cùng của máy khách, trước khi thoát. Giá trị mặc định là 10800 (3 giờ). --max_idle_secs=0
sẽ khiến quy trình máy chủ Bazel duy trì vô thời hạn.
Các tập lệnh gọi Bazel có thể sử dụng lựa chọn này để đảm bảo rằng chúng không để lại các quy trình máy chủ Bazel trên máy của người dùng khi chúng không chạy.
Ví dụ: một tập lệnh tiền gửi có thể muốn gọi bazel query
để đảm bảo rằng thay đổi đang chờ xử lý của người dùng không tạo ra các phần phụ thuộc không mong muốn. Tuy nhiên, nếu người dùng chưa thực hiện bản dựng gần đây trong không gian làm việc đó, thì việc tập lệnh tiền gửi bắt đầu một máy chủ Bazel chỉ để máy chủ đó ở trạng thái rảnh trong thời gian còn lại của ngày là điều không mong muốn.
Bằng cách chỉ định một giá trị nhỏ cho --max_idle_secs
trong yêu cầu truy vấn, tập lệnh có thể đảm bảo rằng nếu tập lệnh khiến một máy chủ mới khởi động, thì máy chủ đó sẽ thoát ngay lập tức, nhưng nếu thay vào đó đã có một máy chủ đang chạy, thì máy chủ đó sẽ tiếp tục chạy cho đến khi không hoạt động trong khoảng thời gian thông thường. Tất nhiên, bộ tính giờ ở trạng thái rảnh của máy chủ hiện có sẽ được đặt lại.
--[no]shutdown_on_low_sys_mem
Nếu bạn bật chế độ này và đặt --max_idle_secs
thành một khoảng thời gian dương, thì sau một thời gian không hoạt động, máy chủ bản dựng sẽ tắt khi hệ thống sắp hết bộ nhớ. Chỉ dành cho Linux.
Ngoài việc chạy quy trình kiểm tra trạng thái rảnh tương ứng với max_idle_secs, máy chủ bản dựng sẽ bắt đầu giám sát bộ nhớ hệ thống có sẵn sau khi máy chủ ở trạng thái rảnh trong một khoảng thời gian. Nếu bộ nhớ hệ thống còn trống quá ít, máy chủ sẽ thoát.
--[no]block_for_lock
Nếu được bật, Bazel sẽ đợi các lệnh Bazel khác giữ khoá máy chủ hoàn tất trước khi tiếp tục. Nếu bị vô hiệu hoá, Bazel sẽ thoát khi gặp lỗi nếu không thể lấy khoá ngay lập tức và tiếp tục.
Nhà phát triển có thể sử dụng lệnh này trong các quy trình kiểm tra trước khi gửi để tránh thời gian chờ lâu do một lệnh Bazel khác trong cùng một máy khách gây ra.
--io_nice_level=n
Đặt một cấp độ từ 0 đến 7 để lập lịch IO theo khả năng tốt nhất. 0 là mức độ ưu tiên cao nhất, 7 là mức độ ưu tiên thấp nhất. Trình lập lịch dự đoán chỉ có thể tuân theo tối đa mức độ ưu tiên 4. Các giá trị âm sẽ bị bỏ qua.
--batch_cpu_scheduling
Sử dụng tính năng lập lịch CPU batch
cho Bazel. Chính sách này hữu ích cho những khối lượng công việc không tương tác nhưng không muốn giảm giá trị ưu tiên.
Xem "man 2 sched_setscheduler". Chính sách này có thể giúp hệ thống tương tác tốt hơn nhưng làm giảm thông lượng của Bazel.
Các lựa chọn khác
--[no]announce_rc
Kiểm soát xem Bazel có thông báo các tuỳ chọn khởi động và tuỳ chọn lệnh được đọc từ các tệp bazelrc khi khởi động hay không.
--color (yes|no|auto)
Lựa chọn này xác định xem Bazel có sử dụng màu sắc để làm nổi bật đầu ra trên màn hình hay không.
Nếu bạn đặt lựa chọn này thành yes
, thì đầu ra màu sẽ được bật.
Nếu bạn đặt tuỳ chọn này thành auto
, Bazel sẽ chỉ sử dụng đầu ra có màu nếu đầu ra được gửi đến một thiết bị đầu cuối và biến môi trường TERM được đặt thành một giá trị khác dumb
, emacs
hoặc xterm-mono
.
Nếu bạn đặt tuỳ chọn này thành no
, đầu ra màu sẽ bị vô hiệu hoá, bất kể đầu ra có chuyển đến một thiết bị đầu cuối hay không và bất kể chế độ cài đặt của biến môi trường TERM.
--config=name
Chọn phần cấu hình bổ sung trong các tệp rc; đối với command
hiện tại, nó cũng kéo các lựa chọn từ command:name
nếu có phần như vậy. Có thể được chỉ định nhiều lần để thêm cờ từ một số phần cấu hình. Các bản mở rộng có thể tham chiếu đến các định nghĩa khác (ví dụ: các bản mở rộng có thể được liên kết).
--curses (yes|no|auto)
Lựa chọn này xác định xem Bazel có sử dụng các chế độ điều khiển con trỏ trong đầu ra màn hình hay không. Điều này giúp giảm lượng dữ liệu cuộn và tạo ra một luồng đầu ra gọn gàng, dễ đọc hơn từ Bazel. Tính năng này hoạt động hiệu quả với --color
.
Nếu bạn đặt lựa chọn này thành yes
, thì việc sử dụng chế độ điều khiển con trỏ sẽ được bật.
Nếu bạn đặt lựa chọn này thành no
, thì người dùng sẽ không thể sử dụng các chế độ điều khiển con trỏ.
Nếu bạn đặt lựa chọn này thành auto
, thì bạn có thể sử dụng chế độ điều khiển con trỏ trong cùng điều kiện như đối với --color=auto
.
--[no]show_timestamps
Nếu được chỉ định, dấu thời gian sẽ được thêm vào mỗi thông báo do Bazel tạo, cho biết thời điểm thông báo xuất hiện.