Trang này trình bày các tuỳ 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 đồng hành với danh sách các lệnh của Bazel trong phần Tạo 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. Các mục tiêu này sử dụng cú pháp linh hoạt hơn so với 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 tuỳ chọn có sẵn trong quá trình tạo bản dựng. Khi --long
được sử dụng trên một lệnh trợ giúp, 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 tuỳ chọn.
Bạn chỉ có thể chỉ định hầu hết các tuỳ chọn một lần. Khi được chỉ định nhiều lần, thực thể cuối cùng sẽ thắng. Các tuỳ chọn có thể được chỉ định nhiều lần đượ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
--package_path
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 thấy các gói của mình bằng cách tìm kiếm đường dẫn gói. Đây là một danh sách theo thứ tự được phân tách bằng dấu hai chấm, trong đó mỗi thư mục bazel là gốc của một phần cây nguồn.
Cách chỉ định đường dẫn gói tuỳ chỉnh bằ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à 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 đang hoạt động 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 hoạt động khác sẽ được lấy liên quan đến 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ử đường dẫn gói
.
rồi cd vào thư mục/home/bob/clients/bob_client/bazel/foo
, thì 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 phải 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 có thể tìm thấy tất cả các gói cần thiết ở nơi khác trên đường dẫn gói.
Ví dụ: Tạo từ một ứng dụng trống
% mkdir -p foo/bazel % cd foo/bazel % touch WORKSPACE % 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 xem xét 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 tính năng này để mô phỏng việc xoá các gói mà không cần thực sự xoá các gói đó.
Kiểm tra lỗi
Các tuỳ 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 tuỳ chọn này thành false, thì các bước kiểm tra chế độ hiển thị sẽ bị hạ cấp thành cảnh báo. Giá trị mặc định của tuỳ chọn này là true, vì vậy, theo mặc định, việc kiểm tra chế độ hiển thị sẽ được thực hiện.
--output_filter=regex
Tuỳ chọn --output_filter
sẽ chỉ hiển thị các cảnh báo về bản dựng và biên dịch cho các 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 thành công, thì đầu ra chuẩn và lỗi chuẩn của biểu thức đó sẽ bị loại bỏ.
Dưới đây là một số giá trị điển hình cho tuỳ chọn này:
`--output_filter='^//(first/project|second/project):'` | Hiển thị kết quả cho các gói đã chỉ định. |
`--output_filter='^//((?!(first/bad_project|second/bad_project):).)*$'` | Không hiển thị đầu ra cho các gói đã chỉ định. |
`--output_filter=` | Hiển thị tất cả. |
`--output_filter=DONT_MATCH_ANYTHING` | Không hiển thị nội dung nào. |
Cờ công cụ
Các tuỳ chọn này kiểm soát những tuỳ chọn mà Bazel sẽ chuyển sang các công cụ khác.
--copt=cc-option
Tuỳ chọn này sẽ lấy một đối số sẽ được truyền đến trình biên dịch. Đối số này sẽ được chuyển đến trình biên dịch bất cứ khi nào nó được gọi để xử lý trước, biên dịch và/hoặc tập hợp mã C, C++ hoặc mã tập hợp. Mã này sẽ không được chuyển khi liên kết.
Bạn có thể sử dụng tuỳ 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ần bảng gỡ lỗi, tạo mã độc lập với vị trí.
--host_copt=cc-option
Tuỳ chọn này sẽ lấy 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 máy chủ lưu trữ. Điều này tương tự như tuỳ chọn --copt
, nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.
--host_conlyopt=cc-option
Tuỳ chọn này sẽ lấy 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 máy chủ lưu trữ. Điều này tương tự như tuỳ chọn --conlyopt
, nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.
--host_cxxopt=cc-option
Tuỳ chọn này sẽ lấy 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 máy chủ lưu trữ. Điều này tương tự như tuỳ chọn --cxxopt
, nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.
--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 máy chủ. Lựa chọn này tương tự như tuỳ chọn --linkopt
, nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.
--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 tuỳ chọn dành riêng cho C (chẳng hạn như -Wno-pointer-sign
) bằ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 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 tuỳ chọn dành riêng cho C++ (chẳng hạn như -fpermissive
hoặc -fno-implicit-templates
) bằng --cxxopt
.
Ví dụ:
% bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code
--linkopt=linker-option
Tuỳ chọn này sẽ lấy 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, không áp dụng cho việc biên dịch. Vì vậy, bạn có thể truyền các tuỳ chọn 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 --linkopt
. Ví dụ:
% bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code
Quy tắc bản dựng cũng có thể chỉ định các tuỳ chọn liên kết trong thuộc tính của chúng. Chế độ cài đặt của tuỳ chọn này luôn được ưu tiên. Ngoài ra, hãy xem cc_library.linkopts.
--strip (always|never|sometimes)
Tuỳ 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 với tuỳ chọn -Wl,--strip-debug
.
--strip=always
có nghĩa là luôn xoá thông tin gỡ lỗi.
--strip=never
có nghĩa là không bao giờ xoá 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 xoá thông tin gỡ lỗi khỏi tất cả các tệp nhị phân được 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ỉ xoá thông tin gỡ lỗi. Nếu vì lý do nào đó mà bạn muốn xoá tất cả ký hiệu, không chỉ ký hiệu gỡ lỗi, bạn cần sử dụng tuỳ chọn --strip-all
của ld. Bạn có thể thực hiện việc này bằng cách truyền --linkopt=-Wl,--strip-all
vào Bazel. Ngoài ra, xin lưu ý rằng việc thiết lập 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 ký hiệu, bạn cũng có thể truyền --stripopt=--strip-all
và tạo phiên bản //foo:bar.stripped
của mục tiêu một cách rõ ràng. 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ì bao gồm thao tác loại bỏ trong 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 tuỳ 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
Tuỳ chọn --fdo_instrument
cho phép tạo đầu ra hồ sơ FDO (tối ưu hoá theo hướng phản hồi) khi thực thi tệp nhị phân C/C++ đã tạo. Đối với GCC, đối số đã cung cấp được dùng làm tiền tố thư mục cho cây thư mục tệp cho mỗi đối tượng của các tệp .gcda có chứa thông tin hồ sơ của mỗi tệp .o.
Sau khi tạo cây dữ liệu hồ sơ, cây hồ sơ sẽ được nén và cung cấp cho tuỳ chọn Bazel --fdo_optimize=profile-zip
để bật tính năng biên dịch được tối ưu hoá cho FDO.
Đối với trình biên dịch LLVM, đối số này cũng là thư mục chứa (các) tệp dữ liệu hồ sơ LLVM thô. Ví dụ: --fdo_instrument=/path/to/rawprof/dir/
.
Bạn không thể sử dụng các tuỳ chọn --fdo_instrument
và --fdo_optimize
cùng một lúc.
--fdo_optimize=profile-zip
Tuỳ chọn --fdo_optimize
cho phép sử dụng thông tin hồ sơ tệp trên mỗi đối tượng để thực hiện các hoạt động tối ưu hoá FDO (tối ưu hoá theo hướng 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 được tạo trước đó
của các tệp .gcda chứa thông tin hồ sơ của từng tệp .o.
Ngoài ra, đối số được cung cấp có thể trỏ đến một hồ sơ tự động được xác định bằng đuôi .afdo.
Đố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ể sử dụng các tuỳ chọn --fdo_instrument
và --fdo_optimize
cùng một lúc.
--[no]output_symbol_counts
Nếu được bật, mỗi đường liên kết được gọi bằng vàng của tệp nhị phân có thể thực thi C++ sẽ xuất ra một tệp số lượng biểu tượng (thông qua tuỳ chọn vàng --print-symbol-counts
). Đối với mỗi đầu vào trình liên kết, tệp sẽ ghi lại số lượng ký hiệu đã được xác định và số lượng ký hiệu đã được sử dụng trong tệp nhị phân.
Bạn có thể dùng thông tin này để theo dõi các phần phụ thuộc liên kết không cần thiết.
Tệp đếm biểu tượng được ghi vào đường dẫn đầu ra của tệp nhị phân có tên [targetname].sc
.
Tuỳ chọn này bị tắt theo mặc định.
--java_language_version=version
Tuỳ chọn này chỉ định phiên bản của 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. --> Giá trị có thể là: 8, 9, 10, 11, 14 và 15 và có thể được mở rộng bằng cách đăng ký 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 dùng để tạo các công cụ đượ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 cần dùng để thực thi mã và chạy các chương trình 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à localjdk
.
Các giá trị có thể là: localjdk
, localjdk_version
, remotejdk_11
và remote_jdk17
.
Bạn có thể mở rộng các giá trị này bằng cách đăng ký JVM tuỳ chỉnh bằng quy tắc kho lưu trữ local_java_repository
hoặc remote_java_repostory
.
--tool_java_runtime_version=version
Phiên bản JVM 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 đối số tuỳ chọn đến máy ảo Java. Bạn có thể sử dụng hàm này với 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 máy ảo máy chủ để khởi chạy tất cả tệp nhị phân Java và đặt kích thước vùng nhớ khối xếp khởi động cho máy ảo thành 256 MB.
--javacopt=javac-option
Tuỳ chọn này cho phép truyền đối số tuỳ chọn đến javac. Bạn có thể sử dụng hàm này với 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).
Tuỳ chọn này được truyền đến javac sau các tuỳ chọn mặc định tích hợp sẵn của Bazel cho javac và trước các tuỳ chọn theo quy tắc. Thông số kỹ thuật cuối cùng của bất kỳ tuỳ chọn nào cho javac sẽ chiến thắng. Các tuỳ 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. Mục tiêu Java phải khai báo rõ ràng tất cả mục tiêu được sử dụng trực tiếp dưới dạng phần phụ thuộc. Cờ này hướng dẫn javac xác định các tệp jar thực sự dùng để kiểm tra loại từng tệp java và cảnh báo/lỗi nếu chúng không phải là kết quả của 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 đã 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 từng 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 lỗi thay vì cảnh báo, khiến mục tiêu hiện tại không tạo được 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.
Tạo ngữ nghĩa
Các tuỳ chọn này ảnh hưởng đến các lệnh bản dựng và/hoặc nội dung tệp đầu ra.
--compilation_mode (fastbuild|opt|dbg)
(-c)
Tuỳ chọn --compilation_mode
(thường được rút gọn thành -c
, đặc biệt là -c opt
) lấy đối số là fastbuild
, dbg
hoặc opt
và ảnh hưởng đến nhiều tuỳ chọn tạo mã C/C++, chẳng hạn như mức độ tối ưu hoá và tính đầy đủ của bảng gỡ lỗi. Bazel sử dụng một thư mục đầu ra khác nhau cho mỗi chế độ biên dịch, vì vậy, bạn có thể chuyển đổi giữa các chế độ mà không cần phải tạo lại toàn bộ 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 được bật tính năng gỡ lỗi (-g
) để 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 được 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 tệp nhị phân trong quá trình tạo bản dựng.
--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 biến theo tên, trong trường hợp đó, giá trị sẽ được lấy từ môi trường gọi hoặc bằng 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 gán cho cùng một biến trên nhiều cờ --action_env
, thì giá trị được gán gần đây nhất sẽ thắng.
--experimental_action_listener=label
Tuỳ 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
Tuỳ 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 kết hợp với cờ --experimental_action_listener
.
Theo mặc định, tất cả extra_actions
trong tập hợp đóng bắc cầu của các mục tiêu cần tạo được yêu cầu sẽ được lên lịch thực thi.
--experimental_extra_action_filter
sẽ hạn chế việc lên lịch ở
extra_actions
, trong đó 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ên lịch extra_actions
chỉ áp dụng cho các hành động mà nhãn của chủ sở hữu 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ữ.
--fat_apk_cpu=cpu[,cpu]*
CPU để tạo thư viện C/C++ trong deps
bắc cầu của các quy tắc android_binary
. Các quy tắc C/C++ khác không bị ảnh hưởng. Ví dụ: nếu cc_library
xuất hiện trong deps
bắc cầu của quy tắc android_binary
và quy tắc cc_binary
, thì cc_library
sẽ được tạo ít nhất hai lần: một lần cho mỗi CPU được chỉ định bằng --fat_apk_cpu
cho quy tắc android_binary
và một lần cho CPU được chỉ định bằng --cpu
cho quy tắc cc_binary
.
Mặc định là armeabi-v7a
.
Một tệp .so
được tạo và đóng gói trong tệp APK cho mỗi CPU được chỉ định bằng --fat_apk_cpu
. Tên của tệp .so
đứng trước tên của quy tắc android_binary
bằng "lib". 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]...
Nếu có, 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 chính quy 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 tuỳ chọn đã cho. Tính năng so khớp nhãn sử dụng dạng chuẩn 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, bao gồm cả tên cơ sở (bao gồm cả đuôi) của tệp C++. Thông số này cũng bao gồm mọi tiền tố phụ thuộc vào nền tảng.
Để khớp với các tệp đã tạo (chẳng hạn như đầu ra của quy tắc gen), 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 này 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ẽ so khớp mọi tệp .pb.cc
trong thư mục có tên base
.
Bạn có thể sử dụng tuỳ 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 được sử dụng là gì. Ví dụ: bạn có thể biên dịch bằng --compilation_mode=opt
và biên dịch một số tệp có bật tính năng tối ưu hoá mạnh hơn hoặc tắt tính năng tối ưu hoá.
Caveat: Nếu một số tệp được biên dịch có chọn lọc bằng các biểu tượng gỡ lỗi, thì các biểu tượng có thể bị xoá trong quá trình liên kết. Bạn có thể ngăn điều này bằng cách đặt
--strip=never
.
Cú pháp: [+-]regex[,[+-]regex]...@option[,option]...
Trong đó regex
là viết tắt của một biểu thức chính quy có thể có tiền tố +
để 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 tuỳ chọn chứa ,
, thì tuỳ chọn đó phải được đặt trong dấu ngoặc kép như sau \,
. Các tuỳ chọn cũng có thể chứa @
, vì chỉ @
đầu tiên mới được dùng để phân tách biểu thức chính quy với các tuỳ chọn.
Ví dụ: --per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs
thêm các tuỳ 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ả 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++ có được liên kết động hay không, tương tác với thuộc tính linkstatic trên các quy tắc bản dựng.
Chế độ:
auto
: Dịch sang chế độ phụ thuộc vào nền tảng;default
cho linux vàoff
cho cygwin.default
: Cho phép bazel chọn liên kết độ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 động. Điều này sẽ giúp 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 thu được.off
: Liên kết tất cả các mục tiêu ở chế độ chủ yếu là tĩnh. Nếu bạn đặt-static
trong liên kết, các mục tiêu sẽ thay đổi thành hoàn toàn tĩnh.
--fission (yes|no|[dbg][,opt][,fastbuild])
Bật Fission, tính năng này sẽ ghi thông tin gỡ lỗi C++ vào các tệp .dwo chuyên dụng thay vì tệp .o. Điều này làm giảm đáng kể kích thước đầu vào của 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
), tính năng Phân tách chỉ được bật cho nhóm chế độ biên dịch đã chỉ định. Điều này rất hữu ích cho các chế độ cài đặt bazelrc. Khi được đặt thành yes
, tính năng Phân tách sẽ được bật rộng rãi. Khi được đặt thành no
, tính năng Phân tách sẽ bị tắt trên toàn hệ thống. Giá trị mặc định là no
.
--force_ignore_dash_static
Nếu bạn đặt cờ này, thì mọi tuỳ chọn -static
trong các tuỳ chọn liên kết của các tệp BUILD quy tắc cc_*
sẽ bị bỏ qua. Đây chỉ là giải pháp cho các bản dựng tăng cường C++.
--[no]force_pic
Nếu được bật, tất cả các bản biên dịch C++ sẽ tạo mã không phụ thuộc vào vị trí ("-fPIC"), các đường liên kết sẽ ưu tiên thư viện tạo sẵn PIC hơn thư viện không phải PIC và các đường liên kết sẽ tạo tệp thực thi không phụ thuộc vào vị trí ("-pie"). Trạng thái mặc định là tắt.
--android_resource_shrinking
Chọn thực hiện việc rút gọn tài nguyên cho các quy tắc android_binary. Đặt giá trị mặc định cho thuộc tính shrink_resources trên các quy tắc android_binary; xem tài liệu về quy tắc đó để biết thêm 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ả thuộc tính malloc="target"
, bao gồm cả các 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
Tuỳ 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ả hoạt động biên dịch C++ trong một bản dựng. Bazel sẽ tìm tệp CROSSTOOL trong vị trí đó và sử dụng tệp đó để tự động xác định 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 máy chủ lưu trữ, chẳng hạn như các công cụ chạy trong quá trình tạo bản dựng. Mục đích chính của cờ này là bật tính năng biên dịch chéo.
--apple_crosstool_top=label
Công cụ đa nền tả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 các mục tiêu đó, cờ này sẽ ghi đè --crosstool_top
.
--android_crosstool_top=label
Công cụ đa nền tả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 android_binary
. Điều này rất hữu ích nếu các mục tiêu khác trong bản dựng yêu cầu một công cụ đa nền tảng khác. Theo mặc định, bạn sẽ sử dụng công cụ đa nền tảng do quy tắc android_ndk_repository
tạo trong tệp WORKSPACE.
Xem thêm --fat_apk_cpu
.
--compiler=version
Tuỳ 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
) để dùng cho quá trình biên dịch tệp nhị phân trong quá trình xây dựng. Nếu muốn tạo bằng một công cụ đa nền tảng tuỳ chỉnh, bạn nên sử dụng tệp CROSSTOOL thay vì chỉ định cờ này.
--android_sdk=label
Tuỳ 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 bất kỳ quy tắc nào liên quan đến Android.
SDK Android sẽ được chọn tự động nếu quy tắc android_sdk_repository
được xác định trong tệp WORKSPACE.
--java_toolchain=label
Tuỳ chọn này chỉ định nhãn của java_toolchain dùng để biên dịch các tệp nguồn Java.
--host_java_toolchain=label
Nếu không được chỉ định, bazel sẽ sử dụng giá trị của --java_toolchain
để biên dịch mã trong cấu hình máy chủ lưu trữ, chẳng hạn như cho các công cụ chạy trong quá trình tạo bản dựng. Mục đích chính của cờ này là cho phép biên dịch chéo.
--javabase=(label)
Tuỳ chọn này sẽ đặt nhãn của bản cài đặt Java cơ sở để dùng cho chạy Bazel, kiểm thử Bazel và cho các tệp nhị phân Java được tạo theo quy tắc java_binary
và java_test
. JAVABASE
và JAVA
biến "Tạo" bắt nguồn từ tuỳ chọn này.
--host_javabase=label
Tuỳ chọn này đặt nhãn của quá trình cài đặt Java cơ sở để sử dụng trong cấu hình máy chủ, ví dụ: cho các công cụ bản dựng máy chủ bao gồm JavaBuilder và Singlejar.
Thao tác này không chọn trình biên dịch Java dùng để biên dịch các tệp nguồn Java. Bạn có thể chọn trình biên dịch bằng cách đặt tuỳ chọn --java_toolchain
.
Chiến lược thực thi
Các tuỳ chọn này ảnh hưởng đến cách Bazel thực thi bản dựng. Các lớp này 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, tác động chính của các biến thể này là đến tốc độ của bản dựng.
--spawn_strategy=strategy
Tuỳ chọn này kiểm soát vị trí và cách thực thi lệnh.
standalone
khiến các lệnh được thực thi dưới dạng quy trình con cục bộ. Giá trị này không còn được dùng nữa. Thay vào đó, hãy sử dụnglocal
.sandboxed
thực thi các lệnh bên trong hộp cát trên máy cục bộ. Điều này đòi hỏi tất cả tệp đầu vào, phần phụ thuộc dữ liệu và công cụ đều phải được liệt kê 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 bật hộp cát cục bộ trên các hệ thống hỗ trợ việc thực thi trong hộp cát.local
khiến các lệnh được thực thi dưới dạng quy trình phụ cục bộ.worker
thực thi các lệnh bằng một worker ổn định (nếu có).docker
thực thi các lệnh bên trong hộp cát docker trên máy cục bộ. Bạn cần cài đặt docker để thực hiện việc này.remote
thực thi các lệnh từ xa; tính năng này chỉ hoạt động nếu bạn đã định cấu hình riêng một trình thực thi từ xa.
--strategy mnemonic=strategy
Tuỳ 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) trên cơ sở mỗi câu lệnh. Hãy xem --spawn_strategy để biết các chiến lược được hỗ trợ và hiệu quả của các chiến lược đó.
--strategy_regexp=<filter,filter,...>=<strategy>
Tuỳ chọn này chỉ định chiến lược sẽ được 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ề
việc so khớp regex_filter. Hãy xem --spawn_strategy để biết các chiến lược được hỗ trợ và hiệu quả của các chiến lược đó.
regex_filter
cuối cùng khớp với nội dung mô tả sẽ được sử 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 hành động bằng chiến lượclocal
nếu nội dung mô tả của các hành động đó 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 "Biên dịch //foo/bar/baz" bằng chiến lượcsandboxed
nhưng đảo ngược thứ tự chạy phương thức này bằnglocal
. - Ví dụ:
--strategy_regexp='Compiling.*/bar=local,sandboxed'
chạy "Compiling //foo/bar/baz" (Biên dịch //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 dùng nữa cho --strategy=Genrule=strategy
.
--jobs=n
(-j)
Tuỳ chọn này (lấy đối số số nguyên) chỉ định giới hạn về số lượng công việc cần đượ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ề các công việc chưa hoàn tất (chẳng hạn như các chương trình kiểm thử chạy trong thời gian dài). Tuỳ chọn này đặt tần suất báo cáo, tiến trình sẽ được in mỗi n
giây.
Giá trị mặc định là 0, nghĩa là thuật toán tăng dần: 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 tuỳ chọn này chỉ định lượng tài nguyên cục bộ (RAM tính bằng MB và số lõi logic CPU) mà Bazel có thể xem xét khi lên lịch xây dựng và kiểm thử các hoạt động để chạy cục bộ. Các cờ này nhận 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 với nhau; bạn có thể đặt một hoặc cả hai. Theo mặc định, Bazel ước tính dung lượng RAM và số lõi CPU ngay trong 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) sẽ chỉ định xem có nên tạo các đường liên kết tượng trưng cho các chương trình kiểm thử và tệp nhị phân 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 gây ra hao tổn nào khi tạo cây tệp chạy hay không.
Khi các chương trình kiểm thử (hoặc ứng dụng) được thực thi, các phần phụ thuộc dữ liệu trong thời gian chạy sẽ được tập hợp ở cùng một nơi. Trong cây đầu ra của Bazel, cây "runfiles" này thường được đặt làm gốc như một thành phần đồng cấp của tệp nhị phân hoặc kiểm thử tương ứng.
Trong quá trình chạy kiểm thử, bạn có thể truy cập vào các tệp chạy bằng đường dẫn có dạng $TEST_SRCDIR/workspace/packagename/filename
.
Cây runfiles đảm bảo rằng các chương trình kiểm thử có quyền truy cập vào tất cả các tệp mà chúng có phần phụ thuộc đã khai báo và không có gì khác. Theo mặc định, cây runfile đượ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 lên và đối với một số bản dựng lớn, chi phí này có thể đóng góp đáng kể vào thời gian xây dựng tổng thể, đặc biệt là vì mỗi lần kiểm thử (hoặc ứng dụng) riêng lẻ đều yêu cầu cây tệp chạy riêng.
--[no]build_runfile_manifests
Tuỳ chọn này được bật theo mặc định, chỉ định xem có nên ghi tệp kê khai tệp chạy vào cây đầu ra hay không.
Việc tắt tính năng này sẽ ngụ ý --nobuild_runfile_links
.
Bạn có thể tắt tính năng này khi thực thi kiểm thử từ xa, vì cây tệp chạy sẽ được tạo từ xa từ tệp kê khai trong bộ nhớ.
--[no]discard_analysis_cache
Khi bật tuỳ 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 tăng dần sẽ chậm hơn. Xem thêm về chế độ tiết kiệm bộ nhớ.
--[no]keep_going
(-k)
Giống 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 tạo càng nhiều càng tốt ngay cả khi gặp lỗi. Tuỳ 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 lỗi.
Mặc dù tuỳ chọn này thường liên kết với giai đoạn thực thi của bản dựng, nhưng tuỳ chọn này cũng ảnh hưởng đến giai đoạn phân tích: nếu có một số mục tiêu được chỉ định trong lệnh bản dựng, nhưng chỉ một số mục tiêu trong số đó có thể được phân tích thành công, thì bản dựng sẽ dừng và báo lỗi, trừ phi bạn chỉ định --keep_going
. Trong trường hợp này, bản dựng sẽ chuyển sang giai đoạn thực thi, nhưng chỉ dành cho các 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 kết quả 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 tệp jar giao diện chỉ chứa chữ ký của các phương thức truy cập không riêng tư (phương thức và trường truy cập công khai, được bảo vệ và mặc định (gói)), đồng thời sử dụng các tệp giao diện để biên dịch các mục tiêu phụ thuộc. Điều này giúp bạn có thể tránh việc biên dịch lại khi chỉ thực hiện thay đổi đối với nội dung phương thức hoặc thành phần riêng tư của một lớp.
--[no]interface_shared_objects
Tuỳ chọn này cho phép đối tượng dùng chung giao diện, nhờ đó 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 đối tượng dùng chung, thay vì cách triển khai đối tượng đó. Khi chỉ có các thay đổi về cách triển khai, Bazel có thể tránh tạo lại các mục tiêu phụ thuộc vào thư viện dùng chung đã thay đổi một cách không cần thiết.
Lựa chọn đầu ra
Các tuỳ 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 sẽ kích hoạt giai đoạn thực thi của bản dựng; tuỳ chọn này được bật theo mặc định. Khi bạn tắt tính năng này, giai đoạn thực thi sẽ bị bỏ qua và chỉ có hai giai đoạn đầu tiên là tải và phân tích mới xảy ra.
Tuỳ chọn này có thể hữu ích để xác thự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 kỳ nội dung nào.
--[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ữ.
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
bị 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 bản dựng trong cây foo
.
--[no]check_up_to_date
Tuỳ 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 đã chỉ định có được cập nhật hay không. Nếu có, bản dựng 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, thay vì được tạo, lỗi sẽ được báo cáo và bản dựng sẽ không thành công. Tuỳ chọn này có thể hữu ích để xác định xem một bản dựng có được thực hiện gần đây hơn một nội dung 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 của tệp đối số. Điều này rất hữu ích khi 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 phụ thuộc vào tệp nguồn để phát hiện lỗi sớm nhất có thể trong chu trình chỉnh sửa/xây dựng/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 gắn cờ: mỗi đối số phải là một nhãn đích tệp hoặc tên tệp thuần tuý tương ứng với thư mục đang làm việc hiện tại, và một quy tắc phụ thuộc vào từng tên tệp nguồn được tạo. Cho
Các nguồn C++ và Java, quy tắc trong cùng một không gian ngôn ngữ đượ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ẫu mục tiêu đượ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 kết quả tạm thời từ trình biên dịch. Các tệp này bao gồm tệp .s (mã tập hợp), tệp .i (C được xử lý trước) và tệp .ii (C++ được xử lý trước). Những dữ liệu đầu ra này thường hữu ích khi gỡ lỗi. Nhiệt độ sẽ chỉ được tạo cho tập hợp mục tiêu được chỉ định trên dòng lệnh.
Cờ --save_temps
hiện chỉ hoạt động cho 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 các mục tiêu có ít nhất một thẻ bắt buộc (nếu có bất kỳ thẻ nào được chỉ định) và không có bất kỳ thẻ bị loại trừ nào. 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 '+' trước đó.
Khi chạy kiểm thử, Bazel sẽ bỏ qua --build_tag_filters
cho các mục tiêu kiểm thử, đượ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 --test_tag_filters
hoặc bằng cách loại trừ các mục tiêu đó một cách rõ ràng.
--test_size_filters=size[,size]*
Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo bản dựng 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 phân tách bằng dấu phẩy gồm các giá trị kích thước kiểm thử được phép (nhỏ, trung bình, lớn hoặc rất lớn), tuỳ ý đứng sau ký hiệu ":" 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
% bazel test --test_size_filters=-large,-enormous //foo:all
sẽ chỉ kiểm thử các bài kiểm thử nhỏ và trung bình bên trong //foo.
Theo mặc định, tính năng 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ẽ kiểm thử (hoặc tạo bản dựng nếu --build_tests_only
cũng được chỉ định) chỉ kiểm thử các mục tiêu với thời gian chờ nhất định. Bộ lọc thời gian chờ kiểm thử được chỉ định dưới dạng danh sách phân tách bằng dấu phẩy gồm các giá trị thời gian chờ kiểm thử được phép (ngắn, trung bình, dài hoặc vĩnh viễn), có thể được đặt trước bằng dấu "-" dùng để 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 hết thời gian thử nghiệm 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 bản dựng 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ó) và không có thẻ nào bị loại trừ. Bộ lọc thẻ thử nghiệm được chỉ định dưới dạng danh sách các từ khoá thẻ được phân tách bằng dấu phẩy, có thể đứng trước ký hiệu '-' để biểu thị các thẻ bị loại trừ. Các thẻ bắt buộc cũng có thể có dấu "+" đứng trước.
Ví dụ:
% bazel test --test_tag_filters=performance,stress,-flaky //myproject:all
sẽ kiểm tra các mục tiêu được gắn thẻ performance
hoặc
stress
nhưng không được gắn 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 trên các thẻ size
và local
của kiểm thử theo cách này.
--test_lang_filters=lang[,lang]*
Chỉ định danh sách các ngôn ngữ kiểm thử được phân tách bằng dấu phẩy cho các ngôn ngữ có quy tắc *_test
chính thức (xem bách khoa toàn thư về bản dựng để biết danh sách đầy đủ các ngôn ngữ này). Bạn có thể thêm dấu "-" vào đầu mỗi ngôn ngữ để chỉ định các ngôn ngữ bị loại trừ. Tên dùng cho mỗi ngôn ngữ phải giống với tiền tố ngôn ngữ trong quy tắc *_test
, ví dụ: cc
, java
hoặc sh
.
Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo bản dựng nếu --build_tests_only
cũng được chỉ định) các mục tiêu kiểm thử của(các) ngôn ngữ được chỉ định.
Ví dụ:
% bazel test --test_lang_filters=cc,java foo/...
sẽ chỉ kiểm thử các kiểm thử C/C++ và Java (được xác định bằng các quy tắc cc_test
và java_test
tương ứng) trong foo/...
, trong khi
% bazel test --test_lang_filters=-sh,-java foo/...
sẽ chạy tất cả các chương trình kiểm thử trong foo/...
, ngoại trừ các chương trình kiểm thử sh_test
và java_test
.
Theo mặc định, tính năng lọc ngôn ngữ kiểm thử sẽ không được áp dụng.
--test_filter=filter-expression
Chỉ định một bộ lọc mà trình chạy kiểm thử có thể sử 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 mới được chạy.
Cách diễn giải cụ thể của filter-expression phụ thuộc vào khung kiểm thử chịu trách nhiệm chạy kiểm thử. Đó có thể là một cụm cầu, chuỗi con hoặc biểu thức chính quy. --test_filter
là một phương thức thuận tiện hơn so với việc truyền các đối số bộ lọc --test_arg
khác nhau, nhưng không phải tất cả các khung đều hỗ trợ phương thức này.
Độ chi tiết
Các tuỳ chọn này kiểm soát mức độ chi tiết của đầu ra của Bazel, đến thiết bị đầu cuối hoặc đến các tệp nhật ký bổ sung.
--explain=logfile
Tuỳ chọn này yêu cầu đố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, đối với mỗi bước xây dựng, lý do tại sao bước đó đang được thực thi hoặc bước đó đã được cập nhật. Nội dung giải thích được ghi vào logfile.
Nếu bạn gặp phải trường hợp tạo lại không mong muốn, tuỳ chọn này có thể giúp bạn hiểu được lý do. Hãy thêm phương thức này vào .bazelrc
để
hoạt động ghi nhật ký xảy 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 thi ngoài dự kiến. Tuỳ chọn này có thể gây ra một mức hao tổn nhỏ về hiệu suất, vì vậy, bạn nên xoá tuỳ chọn này khi không cần thiết nữa.
--verbose_explanations
Tuỳ chọn này tăng độ chi tiết của nội dung giải thích được tạo khi tuỳ chọn --explain được bật.
Cụ thể, nếu bạn bật tính năng 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ì kết quả trong tệp giải thích sẽ bao gồm toàn bộ 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 tuỳ chọn này có thể làm tăng đáng kể thời lượng của tệp giải thích đã tạo và mức giảm về hiệu suất khi sử dụng --explain
.
Nếu bạn không bật --explain
, thì --verbose_explanations
sẽ không có hiệu lực.
--profile=file
Tuỳ chọn này (lấy đối số tên tệp) sẽ 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ơ bản dựng có thể hữu ích trong việc hiểu lệnh build
của Bazel đang dành thời gian ở đâu.
--[no]show_loading_progress
Tuỳ chọn này khiến Bazel xuất ra thông báo tiến trình tải gói. Nếu bạn tắt tính năng này, các thông báo sẽ không xuất hiện.
--[no]show_progress
Tuỳ chọn này sẽ hiển thị thông báo tiến trình; tuỳ chọn này được bật theo mặc định. Khi bạn tắt, 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 mỗi n
giây, trong đó n là một số thực.
Giá trị mặc định cho tuỳ chọn này là 0,02, nghĩa là bazel sẽ giới hạn số lượng thông báo tiến trình ở mức một thông báo 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 một mục tiêu bản dựng được chỉ định, 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ó, 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ì thông tin kết quả sẽ không hiển thị.
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 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ể gây choáng ngợp và gây mất tập trung; tuỳ chọn này cho phép kiểm soát thông tin đó. --show_result
lấy một đối số số nguyên. Đây 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, thì thông tin về kết quả sẽ không hiển thị cho từng mục tiêu riêng lẻ. Do đó, giá trị 0 sẽ khiến thông tin kết quả luôn bị loại bỏ và giá trị rất lớn sẽ khiến kết quả luôn được in.
Người dùng có thể 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
kiểm thử hồi quy). Trong trường hợp trước, thông tin kết quả rất hữu ích, còn trong trường hợp sau thì ít hữu ích hơn. Giống như tất cả các tuỳ chọn, bạn có thể chỉ định giá trị này một cách ngầm ẩn thông qua tệp .bazelrc
.
Các tệp được in để dễ dàng sao chép và dán tên tệp vào shell, nhằm chạy các tệp thực thi đã tạo. Các thông báo "đã cập nhật" hoặc "không thành công" cho từng mục tiêu có thể dễ dàng được các tập lệnh phân tích cú pháp để tạo bản dựng.
--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. Tuỳ 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 hiển thị cho các thao tác trong quá trình thực thi.
--subcommands
(-s
)
Tuỳ chọn này khiến giai đoạn thực thi của Bazel in toàn bộ dòng lệnh cho mỗi lệnh trước khi thực thi lệnh đó.
>>>>> # //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 shell Bourne,
để có thể dễ dàng sao chép và dán vào lời nhắc lệnh shell.
(Các dấu ngoặc đơn xung quanh được cung cấp để bảo vệ shell của bạn khỏi 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 đường liên kết tượng trưng. Không có dòng lệnh nào để hiển thị đối với những trường hợp này.
Bạn có thể truyền --subcommands=pretty_print
để in các đối số của lệnh dưới dạng danh sách thay vì một dòng. Điều 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 lại các lệnh con vào một tệp ở định dạng phù hợp 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 toàn bộ dòng lệnh cho các lệnh không thành công. Thao tác này có thể vô giá 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 shell Bourne, phù hợp với việc sao chép và dán vào lời nhắc shell.
Trạng thái của Workspace
Sử dụng các tuỳ chọn này để "ấn dấu" tệp nhị phân do Bazel tạo: để nhúng thông tin bổ sung vào tệp nhị phân, chẳng hạn như bản sửa đổi 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à các 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ư bản sửa đổi kiểm soát nguồn hiện tại.
Giá trị của cờ phải là một đườ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à tệp nhị phân gốc, thường là tệp ".exe", ".bat" hoặc ".cmd".
Chương trình sẽ in từ 0 đến nhiều cặp khoá/giá trị vào đầu ra chuẩn, mỗi dòng có một mục nhập, sau đó thoát bằng 0 (nếu không, bản dựng sẽ không thành công). Tên khoá có thể là bất kỳ, nhưng chỉ được sử dụng chữ hoa và dấu gạch dưới. Dấu cách đầu tiên sau tên khoá sẽ phân tách khoá với giá trị. Giá trị này là phần còn lại của dòng (bao gồm cả khoảng trắng bổ sung). Cả khoá và giá trị đều không được trải dài nhiều dòng. Các khoá không được trùng lặp.
Bazel phân vùng các khoá thành hai nhóm: "ổn định" và "tự tính toán lại". (Tên "ổn định" và "không ổn định" hơi trái với trực giác, vì vậy đừng 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ị mà tên 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 các khoá đó
Hợp đồng này là:
Giá trị của khoá "ổn định" hiếm khi thay đổi (nếu có thể). Nếu nội dung của
bazel-out/stable-status.txt
thay đổi, Bazel sẽ vô hiệu hoá các hành động phụ thuộc vào những 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ông tin như dấu thời gian, vì chúng luôn thay đổi và sẽ khiến Bazel chạy lại các hành động được đóng dấu với mỗi bản dựng.Bazel luôn xuất ra 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 khoá "không ổn định" có thể thay đổi thường xuyên. Bazel dự kiến các giá trị này sẽ thay đổi liên tục, giống như dấu thời gian, đồng thời cập nhật tệp
bazel-out/volatile-status.txt
một cách thích hợp. Tuy nhiên, để tránh phải chạy lại các thao tác được đóng dấu mọi lúc, Bazel giả vờ rằng 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 không ổn định là tệp duy nhất có nội dung thay đổi, thì Bazel sẽ không vô hiệu hoá các hành động phụ thuộc vào tệp đó. Nếu các dữ liệu đầ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 không ổn định đã cập nhật, nhưng chỉ thay đổi trạng thái không ổn định sẽ không làm mất hiệu lực của hành động.Bazel luôn xuất ra các khoá không ổn định sau:
BUILD_TIMESTAMP
: thời gian tạo bản dựng tính bằng giây kể từ Unix Epoch (giá trị củaSystem.currentTimeMillis()
chia cho một nghìn)
Trên Linux/macOS, bạn có thể truyền --workspace_status_command=/bin/true
để tắt tính năng truy xuất trạng thái không gian làm việc, vì true
không thực hiện hành động nào, thành công (thoát bằng 0) và không in kết quả nào. Trên Windows, bạn có thể truyền đường dẫn của true.exe
của MSYS để đạt được hiệu quả tương tự.
Nếu lệnh trạng thái không gian làm việc không thành công (không bằng 0) vì bất kỳ lý do gì, thì bản dựng sẽ không thành công.
Chương trình mẫu trên Linux sử dụ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 không ổn định 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 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 trên cơ sở 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
), tuỳ 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 máy chủ, bất kể tuỳ 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
), tính năng đóng dấu sẽ bị tắt bất kể --[no]stamp
. Việc chỉ định --stamp
sẽ không buộc các mục tiêu phải tạo lại nếu các phần phụ thuộc của chúng không thay đổi.
Bạn thường nên đặt --nostamp
để tăng hiệu suất bản dựng, vì việc này giúp giảm độ 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 bản dựng.
Nền tảng
Sử dụng các tuỳ chọn này để kiểm soát máy chủ lưu trữ và nền tảng mục tiêu định cấu hình cách hoạt động của bản dựng, đồng thời kiểm soát 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ả các nền tảng mục tiêu cho lệnh hiện tại.
--host_platform=label
Nhãn của quy tắc nền tảng mô tả hệ thống lưu trữ.
--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 hành động. Bạn có thể chỉ định nền tảng theo mục tiêu chính xác hoặc dưới dạng mẫu mục tiêu. Các nền tảng này sẽ được xem xét trước những nền tảng được khai báo trong tệp WORKSPACE bằng register_execution_platforms().
--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ụ bằng 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 tệp WORKSPACE bằng register_toolchains().
--toolchain_resolution_debug=regex
In thông tin gỡ lỗi trong khi tì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ặp lỗi gỡ 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 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 đường liên kết tượng trưng tiện lợi đã 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 các liên kết tượng trưng bazel-bin
, bazel-testlogs
và bazel-genfiles
.
Nếu không thể tạo đường liên kết tượng trưng vì bất kỳ lý do gì, 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ể, tính năng 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. Mọi đường dẫn được in trong thông báo thông tin khi kết thúc bản dựng sẽ chỉ sử dụng biểu mẫu ngắn tương đối liên kết tượng trưng nếu các liên kết tượng trưng trỏ đến vị trí dự kiến; nói cách khác, bạn có thể dựa vào độ chính xác của các đường dẫn đó, ngay cả khi không thể dựa vào các liên kết tượng trưng đang được tạo.
Một số giá trị phổ biến của tuỳ chọn này:
Ngăn chặn việc tạo đường liên kết tượng trưng:
--symlink_prefix=/
sẽ khiến Bazel không tạo hoặc cập nhật bất kỳ đường liên kết tượng trưng nào, bao gồm cả đường liên kết tượng trưngbazel-out
vàbazel-<workspace>
. Sử dụng chế độ này để chặn hoàn toàn việc tạo đường liên kết tượng trưng.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 hậu tố vào tên ngắn của cấu hình, 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ẽ đưa các tệp vào các thư mục khác nhau, chẳng hạn như để cải thiện tỷ lệ truy cập vào bộ nhớ đệm cho các bản dựng sẽ làm hỏng các tệp đầu ra của nhau hoặc để giữ lại 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 đủ.
--[no]use_action_cache
Tuỳ chọn này được bật theo mặc định. Nếu bạn tắt, Bazel sẽ không sử dụng bộ nhớ đệm thao tác cục bộ. Việc tắt bộ nhớ đệm thao tác cục bộ sẽ tiết kiệm bộ nhớ và dung lượng ổ đĩa cho các bản dựng sạch, nhưng sẽ làm chậm các bản dựng gia tăng.
--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ả luồng Starlark và ghi hồ sơ ở định dạng pprof vào tệp đã đặt tên.
Sử dụng tuỳ chọn này để xác định các hàm Starlark làm chậm quá trình tải và phân tích 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 nhiều chế độ xem 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 để phát hành
Bazel được cả kỹ sư phần mềm sử dụng trong chu kỳ phát triển và kỹ sư phát hành sử dụng khi chuẩn bị tệp nhị phân để triển khai vào môi trườ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.
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ẽ phát sinh như đối với các tập lệnh khác thực hiện 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 tuỳ chọn sau:
Những tuỳ 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 giá trị 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 sẽ phân biệt các 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
, theo sau là tên của 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 tạo bản dựng và kiểm thử, 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 tạo các điều kiện tiên quyết, 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 tuỳ chọn này thành "tự động" (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:
- 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ử
- kiểm thử được đánh dấu là
external
- nhiều lần chạy kiểm thử đã được yêu cầu bằng
--runs_per_test
- kiểm thử không thành công.
Nếu là "không", tất cả các chương trình kiểm thử sẽ được thực thi vô điều kiện.
Nếu là "có", thì hành vi lưu vào bộ nhớ đệm sẽ giống như tự động, ngoại trừ việc có thể lưu vào bộ nhớ đệm các lần kiểm thử không thành công và chạy kiểm thử bằng --runs_per_test
.
Người dùng đã bật tuỳ chọn này theo mặc định trong tệp .bazelrc
có thể thấy các chữ viết tắt -t
(bật) hoặc -t-
(tắt) thuận tiện cho việc ghi đè giá trị 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 chương trình 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ỳ chương trình kiểm thử nào chưa được tạo và chạy trước đó hoặc kết quả kiểm thử đã lỗi thời (ví dụ: do mã nguồn hoặc tuỳ chọn bản dựng đã thay đổi), thì Bazel sẽ báo cáo thông báo lỗi ("kết quả kiểm thử không mới nhất"), sẽ ghi lại trạng thái của kiểm thử là "KHÔNG CÓ TÌNH TRẠNG" (màu đỏ, nếu bạn bật kết quả đầu ra có màu) và sẽ trả về một mã thoát khác 0.
Tuỳ chọn này cũng ngụ ý hành vi của [--check_up_to_date](#check-up-to-date)
.
Tuỳ 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
Tuỳ 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 chương trình kiểm thử lâu hơn đáng kể so với thời gian thực thi thực tế của chương trình kiểm thử. Mặc dù bạn nên đặt thời gian chờ của quy trình kiểm thử để quy trình này không bị gián đoạn, nhưng quy trình kiểm thử có thời gian chờ quá hào phóng có thể che giấu các vấn đề thực sự phát sinh ngoài dự kiến.
Ví dụ: một 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 giá trị này quá hào phóng.
Tuỳ chọn này hữu ích để 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 chạy đế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 kiểm thử không đạt. Các bước xây dựng và lệnh gọi kiểm thử tiếp theo sẽ không được chạy và các lệnh gọi đang trong quá trình 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 thử nghiệm tối đa nếu kiểm thử không thành công vì bất kỳ lý do gì. Một kiểm thử ban đầu không thành công nhưng cuối cùng lại thành công sẽ được báo cáo là FLAKY
trong phần tóm tắt kiểm thử. Tuy nhiên, hàm này được coi là được truyền khi xác định mã thoát Bazel hoặc tổng số kiểm thử đã vượt qua. Các bài kiểm thử không thành công trong tất cả các lần thử được phép sẽ được coi là không thành công.
Theo mặc định (khi tuỳ chọn này không được chỉ định hoặc khi tuỳ chọn được đặt thành mặc định), hệ thống chỉ cho phép một lần kiểm thử thông thường và 3 lần đối với các quy tắc kiểm thử đã đặt thuộc tính flaky
. Bạn có thể chỉ định một giá trị số 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ượt kiểm thử để ngăn chặn hành vi sử dụng hệ thống sai mục đích.
--runs_per_test=[regex@]number
Tuỳ chọn này chỉ định số lần thực thi mỗi bà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 kiểm thử 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ó, thì mọi lần chạy không thành công đều khiến toàn bộ quy trình kiểm thử không thành công.
- Nếu có và hai lần chạy từ cùng một phân mảnh trả về PASS và FAIL, thì kiểm thử sẽ nhận được trạng thái không ổn định (trừ khi 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 con số, tất cả các chương trình kiểm thử sẽ chạy nhiều lần như vậy.
Ngoài ra, bạn có thể chỉ định một biểu thức chính quy bằng cú pháp
regex@number. Thao tác này ràng buộc tác độ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ử
dưới //pizza/
4 lần).
Bạn có thể chỉ định nhiều lần dạng --runs_per_test
này.
--[no]runs_per_test_detects_flakes
Nếu bạn chỉ định tuỳ chọn này (theo mặc định là không), Bazel sẽ phát hiện các mảnh 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 mảnh không thành công và một hoặc nhiều lần chạy cho cùng một mảnh thành công, thì mục tiêu sẽ được coi là không ổn định với cờ này. Nếu không được chỉ định, mục tiêu sẽ báo cáo trạng thái không đạt.
--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 mỗi lần kiểm thử cùng với tên của tệp chứa kết quả 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: chỉ in thông tin về các bài kiểm thử không đạt.detailed
in từng trường hợp kiểm thử không thành công, chứ không chỉ in từng lượt kiểm thử. Tên của các tệp đầu ra kiểm thử 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
hiển thị thông tin tóm tắt về việc mỗi lần kiểm thử có thành công hay không. Đồng thời cho biết tên tệp nhật ký đầu ra của các lượt kiểm thử không thành công. Bản tóm tắt sẽ được in ở cuối bản dựng (trong quá trình tạo bản dựng, người dùng sẽ chỉ thấy các thông báo tiến trình đơn giản khi kiểm thử bắt đầu, vượt qua hoặc không vượt qua). Đây là hành vi mặc định.errors
chỉ gửi kết quả 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 kết quả kiểm thử từ các kiểm thử đồng thời không xen kẽ với nhau. In một bản tóm tắt tại bản dựng theo kết quả tóm tắt ở trên.all
tương tự nhưerrors
nhưng in kết quả cho tất cả các chương trình kiểm thử, bao gồm cả những chương trình đã vượt qua.streamed
truyền dữ liệu đầu ra stdout/stderr từ mỗi lần kiểm thử theo thời gian thực.
--java_debug
Tuỳ chọn này khiến máy ảo Java của một kiểm thử Java chờ kết nối 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ư các lượt 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ự nếu có thể.
--test_tmpdir=path
Chỉ định thư mục tạm thời cho các chương trình kiểm thử được thực thi cục bộ. Mỗi chương trình 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 sẽ được dọn sạch ở đầ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 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 được chỉ định làm giá trị thời gian chờ mới. Nếu bạn chỉ cung cấp một giá trị, thì giá trị đó sẽ được sử dụng cho tất cả các danh mục hết 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ự đó). Trong cả hai dạng, giá trị 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ờ nhất định như được xác định bởi trang Kiểm thử mã nguồn. 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 ngầm ẩn hay rõ ràng.
Các kiểm thử nêu rõ danh mục thời gian chờ khác với kích thước sẽ nhận được cùng một giá trị như thể thời gian chờ đó được đặt ngầm bởi 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ả với kiểm thử "lớn" mà không có thời gian chờ rõ ràng.
--test_arg=arg
Truyền các tuỳ chọn/cờ/đối số của dòng lệnh đến từng quy trình kiểm thử. Bạn có thể sử dụng tuỳ chọn này nhiều lần để truyền một số đối số. Ví dụ: --test_arg=--logtostderr --test_arg=--v=3
.
--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 lần kiểm thử. Nếu bạn không chỉ định value, thì lệnh 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ừ trong một kiểm thử bằng cách sử dụng System.getenv("var")
(Java), getenv("var")
(C hoặc C++),
--run_under=command-prefix
Thao tác 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á mã thông báo shell Bourne, sau đó danh sách các từ sẽ được thêm vào trước lệnh sẽ 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 được thay thế bằng vị trí thực thi tương ứng được thêm vào đầu lệnh sẽ được thực thi cùng với các từ khác.
Một số lưu ý sẽ áp dụng:
- PATH dùng để chạy 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 sử dụng đường dẫn tuyệt đối cho lệnh
--run_under
(từ đầu tiên trong command-prefix). stdin
không được kết nối, vì vậy, bạn không thể sử 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ư đã nêu trong phần Tuỳ chọn lựa chọn đầu ra, bạn có thể lọc kiểm thử theo kích thước, thời gian chờ, thẻ hoặc ngôn ngữ. Một 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 tuỳ chọn khác cho bazel test
Cú pháp và các tuỳ chọn còn lại giống hệt như 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. Dưới đây là một phiên điển hình:
% bazel run java/myapp:myapp -- --arg1 --arg2 Welcome to Bazel INFO: Loading package: java/myapp INFO: Loading package: foo/bar INFO: Loading complete. Analyzing... INFO: Found 1 target... ... Target //java/myapp:myapp up-to-date: bazel-bin/java/myapp:myapp INFO: Elapsed time: 0.638s, Critical Path: 0.34s INFO: Running command line: bazel-bin/java/myapp:myapp --arg1 --arg2 Hello there $EXEC_ROOT/java/myapp/myapp --arg1 --arg2
bazel run
tương tự nhưng không giống 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 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à tệp kiểm thử hay không.
Khi tệp nhị phân không phải là tệp kiểm thử, thư mục đang hoạt động sẽ là cây tệp chạy của tệp nhị phân.
Khi tệp nhị phân là một chương trình kiểm thử, thư mục đang hoạt động sẽ là thư mục gốc của tệp thực thi và hệ thống sẽ cố gắng sao chép môi trường kiểm thử thường chạy. Tuy nhiên, quá trình mô phỏng chưa hoàn hảo và không thể chạy các chương trình kiểm thử có nhiều phân đoạn theo cách này (bạn có thể dùng tuỳ 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
: thư mục gốc của không gian làm việc nơi chạy bản dựng.BUILD_WORKING_DIRECTORY
: thư mục đang hoạt động hiện tại nơi chạy Bazel.
Ví dụ: bạn có thể sử dụng các ký tự 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
Điều này có tác dụng tương tự như tuỳ chọn --run_under
cho bazel test
(xem ở trên), ngoại trừ việc tuỳ chọn này áp dụng cho lệnh do bazel
run
chạy thay vì các chương trình kiểm thử do bazel test
chạy và không thể chạy trong nhãn.
Lọc đầu ra ghi nhật ký từ Bazel
Khi gọi một tệp nhị phân bằng bazel run
, Bazel sẽ in kết quả ghi nhật ký từ chính Bazel và tệp nhị phân trong lệnh gọi. Để giảm bớt sự lộn xộn trong nhật ký, bạn có thể
bịt 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 thi kiểm thử
bazel run
cũng có thể thực thi các tệp nhị phân kiểm thử. Việc này có tác dụng chạy kiểm thử trong một khoảng gần bằng môi trường được mô tả trong phần 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 kiểm thử 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ó lệnh clean
, tương tự như lệnh của Make.
Thao tác này sẽ xoá các thư mục đầu ra cho tất cả cấu hình bản dựng do thực thể Bazel này thực hiện hoặc toàn bộ cây hoạt động do thực thể 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ó tuỳ chọn dòng lệnh nào, thì thư mục đầu ra cho tất cả cấu hình sẽ được dọn sạch.
Hãy nhớ rằng mỗi thực thể Bazel đượ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á mọi kết quả đầu ra của mọi bản dựng mà bạn đã thực hiện với thực thể Bazel đó trong không gian làm việc đó.
Để xoá hoàn toàn toàn bộ cây hoạt động do một thực thể Bazel tạo, bạn có thể chỉ định tuỳ chọn --expunge
. Khi được thực thi bằng --expunge
, lệnh clean chỉ xoá toàn bộ cây cơ sở đầu ra, ngoài đầu ra bản dựng, còn chứa tất 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 sạch, tương đương với lệnh shutdown
. Ví dụ: để dọn dẹp tất cả dấu vết bộ nhớ và ổ đĩa của một thực thể Bazel, bạn có thể chỉ định:
% bazel clean --expunge
Ngoài ra, bạn có thể xoá trong nền bằng cách sử dụng --expunge_async
. Bạn có thể an toàn khi gọi một lệnh Bazel trong cùng một ứng dụng trong khi quá trình xoá không đồng bộ tiếp tục chạy.
Lệnh clean
được cung cấp chủ yếu để phục hồi dung lượng ổ đĩa cho các không gian làm việc không còn cần thiết.
Quá trình tạo lại tăng dần 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 sự cố xảy ra.
Thiết kế của Bazel giúp khắc phục được các vấn đề này và các lỗi này là những lỗi cần được khắc phục ở mức độ ưu tiên cao. Nếu bạ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ông cụ thay vì sử dụng clean
.
Truy vấn biểu đồ phần phụ thuộc
Bazel thêm 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 bản dựng. Ngôn ngữ truy vấn được sử dụng bởi hai lệnh: truy vấn 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. Các công cụ này là một công cụ hỗ trợ 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 đó để tham khảo, xem 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ố tuỳ chọn dòng lệnh. --output
chọn định dạng đầu ra.
--[no]keep_going
(tắt theo mặc định) khiến công cụ truy vấn tiếp tục tiến hành khi có lỗi; hành vi này có thể bị tắt 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, sẽ đưa các phần phụ thuộc trong cấu hình không phải mục tiêu 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 ẩn đượ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 thị vị trí của các định nghĩa (trong tệp BUILD) của tất cả genrules cần thiết để tạo tất cả các chương trình 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 hành động trong biểu đồ bản dựng.
Công cụ này hoạt động trên biểu đồ mục tiêu được định cấu hình sau khi phân tích và hiển thị thông tin về các hành động, cấu phần phần mềm và mối quan hệ giữa các hành động, cấu phần phần mềm đó.
Công cụ này chấp nhận một số tuỳ 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 mà con người có thể đọc được. Hãy sử dụng proto
hoặc textproto
cho định dạng mà 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 bộ tuỳ chọn có sẵn trong một bản dựng.
Phương thức này hỗ trợ cùng một tập hợp 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 Truy vấn trong 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, cửa sổ này sẽ hiển thị bản tóm tắt các lệnh và chủ đề trợ giúp có sẵn, như trong phần Tạo 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ủ đề là lệnh Bazel, chẳng hạn như build
hoặc query
, nhưng có một số chủ đề trợ giúp khác 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 tuỳ chọn liên quan cho một chủ đề. Nếu bạn chỉ định tuỳ chọn --long
, thì loại, giá trị mặc định và nội dung mô tả đầy đủ của từng tuỳ chọn cũng sẽ được in.
shutdown
Bạn có thể dừng các quy trình máy chủ Bazel bằng cách sử dụng lệnh shutdown
. Lệnh này khiến máy chủ Bazel thoát ngay khi máy chủ này trở nên 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 máy khách/máy chủ.
Các máy chủ Bazel tự dừng sau khi hết thời gian chờ, vì vậy, bạn hiếm khi cần đến 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 xảy ra trong một không gian làm việc nhất định.
shutdown
chấp nhận một tuỳ chọn, --iff_heap_size_greater_than _n_
, yêu cầu đố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 rất hữu ích đối với các tập lệnh khởi tạo nhiều bản dựng, vì mọi sự cố rò rỉ bộ nhớ trong máy chủ Bazel đều có thể khiến máy chủ Bazel gặp sự cố một cách bất thường khi đôi khi xảy ra sự cố; việc thực hiện việc khởi động lại có điều kiện sẽ giành ưu tiên điều kiện này.
info
Lệnh info
in nhiều giá trị liên kết với thực thể máy chủ Bazel hoặc với một cấu hình bản dựng cụ thể.
(Các tập lệnh điều khiển bản dựng có thể sử dụng những dữ liệu này.)
Lệnh info
cũng cho phép một đối số (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 tạo tập lệnh Bazel, vì bạn không cần phải 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 thực thể Bazel này hoặc "phiên bản phát triển" nếu đây không phải là 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à thực thể Bazel này sử 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à thực thể Bazel này sử dụng cho người dùng hiện tại và tổ hợp không gian làm việc. Bazel đặt tất cả các kết quả tạo bản dựng và tạo 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 của quá trình thực thi trong output_base. Thư mục này là thư mục gốc của mọi tệp có thể truy cập vào các lệnh được thực thi trong quá trình tạo bản dựng, và là thư mục làm việc cho các lệnh đó. Nếu thư mục không gian làm việc có thể ghi, thì một đường liên kết tượng trưng tên làbazel-<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 dùng cho tất cả các tệp thực sự được tạo do các lệnh bản dựng. Nếu thư mục không gian làm việc có thể ghi, thì một đường liên kết tượng trưng có tênbazel-out
sẽ được đặt ở đó trỏ đến thư mục này.server_pid
: mã nhận dạng tiến trình của tiến 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 các tuỳ chọn--output_base
hoặc--output_user_root
.used-heap-size
,committed-heap-size
,max-heap-size
: báo cáo các thông số kích thước vùng nhớ khối xếp JVM khác nhau. 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 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 sẽ được bazel tìm kiếm các gói. Có định dạng giống như đố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 theo cấu hình cụ thể
Dữ liệu này có thể chịu ảnh hưởng của các tuỳ chọn cấu hình được truyền vào bazel info
, chẳng hạn như --cpu
, --compilation_mode
, v.v. Lệnh info
chấp nhận tất cả các tuỳ chọn kiểm soát việc phân tích phần phụ thuộc, vì một số tuỳ chọn trong số này xác định vị trí của thư mục đầu ra của một 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-*
chứa các chương trình do bản dựng tạo ra. Thuộc tính này thường giống với các 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 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 đường liên kết tượng trưngbazel-*
. Các tập lệnh sử dụng giá trị dobazel info
báo cáo sẽ mạnh mẽ hơn, thay vì giả định rằng đường liên kết tượng trưng có tồn tại.- Môi trường"Tạo" hoàn chỉnh. Nếu cờ
--show_make_env
được chỉ định, thì tất cả các biến trong môi trường "Tạo" của cấu hình hiện tại cũng sẽ hiển thị (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 "Tạo", vì vậy, bạ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 được đảm bảo là chính xác ngay cả trong trường hợp không thể tạo đường liên kết tượng trưng bazel-bin
vì lý do nào đó (chẳng hạn như nếu bạn đang tạo từ một thư mục chỉ có thể đọ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 phiên bản in thông tin chi tiết phiên bản về tệp nhị phân Bazel đã tạo, bao gồm cả danh sách thay đổi chứa tệp được tạo và ngày tạo. Các thông tin này đặc biệt hữu ích trong việc xác định xem bạn có phiên bản Bazel mới nhất hay không hoặc bạn có đang báo cáo lỗi hay không. Một số giá trị thú vị là:
changelist
: danh sách thay đổi tại thời điểm phát hành phiên bản Bazel này.label
: nhãn phát hành cho thực thể Bazel này hoặc "phiên bản phát triển" nếu đây không phải là 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ẽ tạo ra kết quả giống như bazel version --gnu_format
, ngoại trừ việc không có hiệu ứng phụ có thể khởi động máy chủ Bazel hoặc giải nén bản lưu trữ máy chủ. Bạn có thể chạy bazel --version
từ bất kỳ đâu – không cần thư mục không gian làm việc.
mobile-install
Lệnh mobile-install
cài đặt ứng dụng cho thiết bị di động.
Hiện chỉ hỗ trợ các thiết bị Android chạy ART.
Xem phần cài đặt bazel trên thiết bị di động để biết thêm thông tin.
Các tuỳ chọn sau được hỗ trợ:
--incremental
Nếu được đặt, Bazel sẽ cố gắng cài đặt ứng dụng tăng dần, 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ư các tài nguyên được tham chiếu bởi Class.getResource()
). Nếu những nội dung này thay đổi, bạn phải bỏ qua tuỳ chọn này. Trái ngược với tinh thần của Bazel và do những hạn chế của nền tảng Android, trách nhiệm của người dùng là phải biết khi nào lệnh này là đủ hiệu quả và khi nào cần cài đặt toàn bộ.
Nếu bạn đang sử dụng một thiết bị chạy Marshmallow trở lên, hãy cân nhắc sử dụng cờ --split_apks
.
--split_apks
Liệu có nên sử dụng tệp 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 phải sử dụng cờ --incremental
khi sử dụng --split_apks
.
--start_app
Khởi động ứng dụng ở trạng thái sạch 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 sạch 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à chế độ mặc định.COLD
Khởi động ứng dụng từ trạng thái mới sau khi cài đặt.WARM
Giữ nguyên và khôi phục trạng thái của ứng dụng khi 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 sạch 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 SDK Android do --android_sdk
chỉ định.
--adb_arg=serial
Các đối số bổ sung cho adb
. Các tuỳ chọn này nằm trước lệnh con trong dòng lệnh và thường được dùng để chỉ định thiết bị cần cài đặt.
Ví dụ: cách chọn thiết bị Android hoặc trình mô phỏng để sử dụng:
% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef
gọi adb
dưới dạng
adb -s deadbeef install ...
--incremental_install_verbosity=number
Độ chi tiết cho quá trình cài đặt tăng dần. Đặt thành 1 để in nhật ký gỡ lỗi lên bảng điều khiển.
dump
Lệnh dump
in ra stdout một tệp 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, kết quả của lệnh này không được chỉ định và có thể thay đổi.
Theo mặc định, lệnh sẽ chỉ in thông báo trợ giúp nêu rõ các tuỳ chọn kết xuất 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 tuỳ chọn.
Các tuỳ chọn sau được hỗ trợ:
--action_cache
kết xuất nội dung bộ nhớ đệm 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 quy tắc cho từng quy tắc và lớp khung hình, bao gồm cả số lượng và số hành động. Điều này bao gồm 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 sử dụng bộ nhớ của các quy tắc cũng sẽ được in.--skylark_memory
kết xuấ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ớ thì chế độ này mới hoạt động.
Theo dõi bộ nhớ
Một số lệnh dump
yêu cầu tính năng theo dõi bộ nhớ. Để bật tính năng này, bạn phải truyền các cờ khởi động đến Bazel:
--host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
--host_jvm_args=-DRULE_MEMORY_TRACKER=1
Tác nhân java được kiểm tra trong Bazel tại third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
, vì vậy, hãy đảm bảo bạn điều chỉnh $BAZEL
cho vị trí bạn lưu trữ kho lưu trữ Bazel của mình.
Đừng quên tiếp tục truyền các tuỳ 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.0.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.0.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.0.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 dữ liệu đã thu thập trước đó trong quá trình xây dựng bằng tuỳ chọn --profile
. Công cụ này cung cấp một số tuỳ chọn để phân tích quá trình thực thi bản dựng hoặc xuất dữ liệu ở định dạng đã chỉ định.
Các tuỳ chọn sau được hỗ trợ:
--dump
hiển thị tất cả dữ liệu đã thu thập ở định dạng mà con người có thể đọc được. Tuy nhiên, tính năng này chưa hỗ trợ các định dạng khác.
Để biết thông tin chi tiết về định dạng và trợ giúp về cách sử dụng, hãy xem phần Khắc phục sự cố về hiệu suất bằng cách phân tích tài nguyên.
canonicalize-flags
Lệnh canonicalize-flags
chứa danh sách các tuỳ chọn cho một lệnh Bazel và trả về một danh sách các tuỳ chọn có hiệu quả tương tự. Danh sách các tuỳ chọn mới là chuẩn hoá. Ví dụ: hai danh sách tuỳ chọn có cùng hiệu ứng được chuẩn hoá thành cùng một danh sách mới.
Bạn có thể dùng tuỳ chọn --for_command
để chọn giữa các lệnh. Hiện tại, chúng tôi chỉ hỗ trợ build
và test
. Các tuỳ 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
Tuỳ chọn khởi động
Các tuỳ chọn được mô tả trong phần này ảnh hưởng đến việc khởi động máy ảo Java mà quy trình máy chủ Bazel sử dụng, đồng thời á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 tuỳ 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ả tuỳ 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 tuỳ 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 phải chỉ định thư mục có thể ghi. Bazel sẽ 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 dùng để xác định vị trí máy chủ Bazel. Khi thay đổi cơ sở đầu ra, bạn thay đổi máy chủ sẽ 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à chuỗi đại diện MD5 của thư mục đó), vì vậy, một giá trị thông thường 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 shell), mỗi lệnh sử dụng một phiên bản máy chủ Bazel khác nhau (do các cơ sở đầu ra khác nhau).
Ngược lại, nếu cơ sở đầu ra mặc định được sử 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 tuần tự: trước tiên là tạo //foo
, sau đó là một bản dựng gia tăng của //bar
.
--output_user_root=dir
Trỏ tới thư mục gốc nơi tạo cơ sở đầu ra và cơ sở cài đặt. Thư mục này phải không tồn tại hoặc thuộc quyền sở hữu của người dùng gọi. Trước đây, thư mục này được phép trỏ đến một thư mục dùng chung giữa nhiều người dùng, nhưng giờ đây không được phép nữa. Điều này có thể được cho phép sau khi giải quyết xong vấn đề #11100.
Nếu bạn chỉ định tuỳ chọn --output_base
, nó sẽ ghi đè bằng cách sử dụng --output_user_root
để tính toán cơ sở đầu ra.
Vị trí cơ sở cài đặt được tính toán dựa trên --output_user_root
, cộng với mã nhận dạng MD5 của tệp nhị phân nhúng Bazel.
Bạn có thể sử dụng tuỳ chọn --output_user_root
để chọn vị trí cơ sở thay thế cho tất cả dữ liệu đầu ra của Bazel (cơ sở cài đặt và cơ sở đầu ra) nếu bố cục hệ thống tệp của bạn có vị trí tốt hơ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 sẽ xuất hiện trước mọi lệnh Bazel, ví dụ:
% bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo
Cờ này không ảnh hưởng đến các JVM mà các quy trình phụ của 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 tuỳ chọn bản 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
"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
"bên phải").
--host_jvm_args=string
Chỉ định một tuỳ 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 thuộc tính này để đặt kích thước ngăn xếp, ví dụ:
% bazel --host_jvm_args="-Xss256K" build //foo
Bạn có thể dùng tuỳ 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 chuỗi được phân tách bằng dấu cách, trong đó 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 ngừng hoạt động.
Đ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 tuỳ chọn JVM đến các chương trình Java có thể thực thi, cho dù 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ợ. Ngoài ra, đối với các chương trình kiểm thử, hãy sử dụng bazel test --test_arg=--jvm_flags=foo ...
.
--host_jvm_debug
Tuỳ chọn này khiến máy ảo Java chờ kết nối 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. Công cụ này chủ yếu dành cho các nhà phát triển Bazel.
--autodetect_server_javabase
Tuỳ 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 không có JRE được nhúng.
Bạn có thể dùng --explicit_server_javabase
để chọn một JRE rõ ràng để chạy Bazel.
--batch
Chế độ hàng loạt khiến Bazel không sử dụng chế độ máy khách/máy chủ tiêu chuẩn, mà thay vào đó chạy một quy trình java bazel cho một lệnh duy nhất. Quy trình này đã được dùng để có 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 vùng chứa chroot.
Chế độ hàng loạt giữ lại 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 chồng chéo. Nếu chế độ hàng loạt Bazel được chạy trên một ứng dụng có máy chủ đang chạy, trước tiên, ứng dụng sẽ tắt 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 giải pháp thay thế được mô tả ở trên. Lý do là ngoài các yếu tố khác, bộ nhớ đệm tệp bản dựng nằm trong bộ nhớ, vì vậy, bộ nhớ đệm này không được lưu giữ 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 trường hợp hiệu suất kém quan trọng hơn, chẳng hạn như các bản dựng liên tục.
--max_idle_secs=n
Tuỳ chọn này chỉ định thời gian (tính bằng giây) mà quy trình máy chủ Bazel phải chờ sau yêu cầu ứng dụng cuối cùng trước khi thoát. Giá trị mặc định là 10800 (3 giờ). --max_idle_secs=0
sẽ khiến quá trình máy chủ Bazel tồn tại vô thời hạn.
Các tập lệnh gọi Bazel có thể sử dụng tuỳ chọn này để đảm bảo rằng các tập lệnh đó không để lại các quy trình máy chủ Bazel trên máy của người dùng khi các tập lệnh đó không chạy.
Ví dụ: tập lệnh gửi trước 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 đưa ra các phần phụ thuộc không mong muốn. Tuy nhiên, nếu người dùng chưa tạo bản dựng gần đây trong không gian làm việc đó, thì tập lệnh gửi trước không nên khởi động máy chủ Bazel chỉ để máy chủ này ở trạng thái rảnh trong suốt thời gian còn lại của ngày.
Bằng cách chỉ định một giá trị nhỏ của --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 đã có một máy chủ đang chạy, thì máy chủ đó sẽ tiếp tục chạy cho đến khi ở trạng thái rảnh trong thời gian thông thường. Tất nhiên, bộ hẹn giờ ở trạng thái rảnh của máy chủ hiện tại sẽ được đặt lại.
--[no]shutdown_on_low_sys_mem
Nếu bạn bật và đặt --max_idle_secs
thành một khoảng thời gian dương, sau khi máy chủ bản dựng ở trạng thái rảnh trong một thời gian, hãy tắt máy chủ 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 theo dõi 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 lại sắp hết, máy chủ sẽ thoát.
--[no]block_for_lock
Nếu được bật, Bazel sẽ chờ các lệnh Bazel khác đang giữ khoá máy chủ hoàn tất trước khi tiếp tục. Nếu bị tắt, Bazel sẽ thoát do lỗi nếu không thể ngay lập tức lấy khoá và tiếp tục.
Nhà phát triển có thể sử dụng thuộc tính này trong các bước kiểm tra trước khi gửi để tránh phải chờ lâu do một lệnh Bazel khác trong cùng một ứng dụng khách gây ra.
--io_nice_level=n
Đặt cấp từ 0 đến 7 để lên lịch IO theo cách tốt nhất có thể. 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 biểu dự đoán chỉ có thể thực hiện tối đa mức độ ưu tiên 4. Bỏ qua các giá trị âm.
--batch_cpu_scheduling
Sử dụng tính năng lên lịch CPU batch
cho Bazel. Chính sách này hữu ích cho các mức tải không tương tác nhưng không muốn giảm giá trị tốt.
Xem "man 2 sched_setscheduler". Chính sách này có thể mang lại khả năng tương tác tốt hơn cho hệ thống nhưng sẽ làm giảm thông lượng của Bazel.
Các tuỳ chọn khác
--[no]announce_rc
Kiểm soát xem Bazel có thông báo các tuỳ chọn lệnh được đọc từ tệp bazelrc khi khởi động hay không. (Các tuỳ chọn khởi động được thông báo vô điều kiện.)
--color (yes|no|auto)
Tuỳ chọn này xác định xem Bazel có sử dụng màu để làm nổi bật đầu ra trên màn hình hay không.
Nếu bạn đặt tuỳ 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 màu nếu đầu ra đang đượ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 với 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ị tắt, 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 từ
các tệp rc; đối với command
hiện tại,
phần này cũng lấy các tuỳ 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 phần mở rộng có thể tham chiếu đến các định nghĩa khác (ví dụ: các phần mở rộng có thể được nối với nhau).
--curses (yes|no|auto)
Tuỳ 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 bớt dữ liệu phải cuộn và cung cấp luồng đầu ra nhỏ gọn, dễ đọc hơn từ Bazel. Cách này hoạt động hiệu quả với --color
.
Nếu bạn đặt tuỳ chọn này thành yes
, thì tính năng sử dụng điều khiển con trỏ sẽ được bật.
Nếu bạn đặt tuỳ chọn này thành no
, thì tính năng sử dụng các nút điều khiển con trỏ sẽ bị tắt.
Nếu bạn đặt tuỳ chọn này thành auto
, thì việc sử dụng các chế độ điều khiển con trỏ sẽ được bật 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 được hiển thị.