Lệnh và tuỳ chọn

Báo cáo vấn đề Xem nguồn Nightly · 7.4 . 7.3 · 7,2 · 7.1 · 7 · 6,5

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 runbazel test. Trang này là phần bổ sung cho 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 (như build hoặc test) có thể hoạt động trên một 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 khi 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.

Hầu hết các lựa chọn đều chỉ có thể được chỉ định một lần. Khi được chỉ định nhiều lần, trường hợp cuối cùng sẽ thắng. Các tuỳ chọn có thể được chỉ định nhiều lần là được xác định trong phần trợ giúp trực tuyến với nội dung "có thể được sử dụng nhiều lần".

Vị trí gói hàng

--package_path

CẢNH BÁO: Tuỳ chọn --package_path không còn được dùng nữa. Bazel thích các gói hơn trong kho lưu trữ chính ở dưới thư mục gốc của không gian làm việc.

Tuỳ chọn này chỉ định tập hợp các thư mục được tìm kiếm để tìm tệp BUILD cho một gói nhất định.

Bazel tìm 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à dấu hai chấm danh sách thư mục bazel theo thứ tự riêng, mỗi thư mục là gốc của một cây nguồn từng phầ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 ở 3 định dạng:

  1. Nếu ký tự đầu tiên là /, thì đường dẫn là tuyệt đối.
  2. 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 làm việc của bạn là /home/bob/clients/bob_client/bazel/foo, thì chuỗi %workspace% trong đường dẫn gói được mở rộng đến /home/bob/clients/bob_client/bazel.
  3. Mọi nội dung khác được lấy tương ứng với thư mục đang hoạt động. Đây thường không phải là điều bạn muốn làm và có thể hoạt động không như mong đợi nếu bạn sử dụng Bazel từ các thư mục bên dưới không gian làm việc bazel. Ví dụ: nếu bạn sử dụng phần tử package-path ., rồi cd vào thư mục /home/bob/clients/bob_client/bazel/foo, 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 một đườ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 MODULE.bazel
  % bazel build --package_path /some/other/path //foo

--deleted_packages

Lựa 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 tìm cách 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 đó. Bạn có thể truyền tuỳ chọn này nhiều lần, trong trường hợp này, các danh sách riêng lẻ sẽ được nối với nhau.

Lỗi khi kiểm tra

Các tuỳ chọn này kiểm soát tính năng 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ì tính năng kiểm tra khả năng hiển thị sẽ bị giảm hạng xuống thành cảnh báo. Giá trị mặc định của tuỳ chọn này là true, để theo mặc định, chế độ hiển thị đã kiểm tra xong.

--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à biểu thức đó được thực thi thành công, tiêu chuẩn của nó kết quả đầu ra và sai số chuẩn 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ố sẽ được truyền đến trình biên dịch bất cứ khi nào đượ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 lựa chọn này nhiều lần. Ví dụ:

  % bazel build --copt="-g0" --copt="-fpic" //foo

sẽ biên dịch thư viện foo mà không cầ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 exec. Điều này tương tự với tuỳ chọn --copt, nhưng chỉ áp dụng cho cấu hình exec.

--host_conlyopt=cc-option

Tuỳ chọn này nhận một đối số sẽ được truyền đến trình biên dịch cho các tệp nguồn C được biên dịch trong cấu hình thực thi. Điều này tương tự với tuỳ chọn --conlyopt, nhưng chỉ áp dụng cho cấu hình thực thi.

--host_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 cho các tệp nguồn C++ được biên dịch trong cấu hình thực thi. Điều này tương tự với tuỳ chọn --cxxopt, nhưng chỉ áp dụng cho cấu hình exec.

--host_linkopt=linker-option

Tuỳ chọn này sẽ lấy một đối số sẽ được truyền đến trình liên kết cho các tệp nguồn được biên dịch trong cấu hình exec. Điều này tương tự với tuỳ chọn --linkopt, nhưng chỉ áp dụng cho cấu hình bộ phận thực thi.

--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 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++. Để bạn có thể chuyể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 sẽ lấy 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. Để bạn có thể chuyển các tuỳ chọn dành riêng cho C++ (chẳng hạn như -fpermissive hoặc -fno-implicit-templates) sử dụ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 phải 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 tạo cũng có thể chỉ định tuỳ chọn đường liên kết trong các 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ả tệp nhị phân và thư viện dùng chung, 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ờ loại bỏ thông tin gỡ lỗi. Giá trị mặc định của --strip=sometimes có nghĩa là xoá nếu --compilation_modefastbuild.

  % 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ả tệp nhị phân.

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 đó bạn muốn xoá tất cả biểu tượng, không chỉ biểu tượng gỡ lỗi, bạn sẽ cần phải sử dụng tuỳ chọn --strip-all của ld, bạn có thể thực hiện bằng cách truyền --linkopt=-Wl,--strip-all đến Bazel. Đồng thời lưu ý rằng việc đặt cờ --strip của Bazel sẽ ghi đè --linkopt=-Wl,--strip-all, vì vậy, bạn chỉ nên đặt một trong hai kích thướ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ì đưa thao tác loại bỏ vào tất 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 vào lệnh strip khi tạo tệp nhị phân *.stripped. Mặc định là -S -p. Bạn có thể sử dụng tuỳ 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ố được cung cấp được dùng làm tiền tố thư mục cho cây thư mục tệp trên mỗi đối tượng của các tệp .gcda chứa thông tin hồ sơ cho mỗi tệp .o.

Sau khi tạo cây dữ liệu hồ sơ, cây hồ sơ phải được nén và cung cấp cho --fdo_optimize=profile-zip Tuỳ chọn Bazel để 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ố cũng là thư mục chứa hồ sơ LLVM thô tệp dữ liệu đã được kết xuất. Ví dụ: --fdo_instrument=/path/to/rawprof/dir/.

Bạn không thể sử dụng các tuỳ chọn --fdo_instrument--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 cấu hình tệp từng đối tượng để thực hiện FDO (thông tin phản hồi tối ưu hoá theo hướng dẫn) khi biên dịch. Đối với GCC, đối số được cung cấp là tệp zip có chứa cây tệp đã tạo trước đó tệp .gcda chứa thông tin hồ sơ cho mỗi 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 LLVM được lập chỉ mục tệp kết quả cho hồ sơ do công cụ llvm-profdata chuẩn bị và phải có tệp .profdata tiện ích.

Bạn không thể sử dụng các tuỳ chọn --fdo_instrument--fdo_optimize cùng một lúc.

--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. --> Các giá trị có thể là: 8, 9, 10, 11, 17 và 21 và có thể được mở rộng bởi đă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 cách sử dụng kho lưu trữ đó.

Giá trị mặc định là local_jdk. Các giá trị có thể là: local_jdk, local_jdk_version, remotejdk_11, remotejdk_17remotejdk_21. Bạn có thể mở rộng các giá trị bằng cách đăng ký JVM tuỳ chỉnh sử dụng Quy tắc kho lưu trữ local_java_repository hoặc remote_java_repository.

--tool_java_runtime_version=version

Phiên bản JVM được dùng để thực thi các công cụ cần thiết trong quá trình tạo bản dựng. Giá trị mặc định là remotejdk_11.

--jvmopt=jvm-option

Tuỳ chọn này cho phép truyền đố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 một java_binary bằng thông tin gỡ lỗi mặc định của javac (thay vì mặc định bazel).

Tuỳ chọn này được chuyển đến javac sau các tuỳ chọn mặc định tích hợp sẵn Bazel cho javac và trước các tuỳ chọn cho mỗi 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ẽ 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. Các mục tiêu Java phải khai báo rõ ràng tất cả các mục tiêu được sử dụng trực tiếp dưới dạng phần phụ thuộc. Cờ này hướng dẫn javac xác định các tệp jar thực sự được sử dụng để kiểm tra loại tệp java và cảnh báo/lỗi nếu chúng không phải là kết quả 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 đang tắt.
  • warn có nghĩa là javac sẽ tạo các cảnh báo java chuẩn thuộc loại [strict] cho mỗi phần phụ thuộc trực tiếp bị thiếu.
  • default, stricterror tất cả có nghĩa là javac sẽ tạo lỗi thay vì cảnh báo, khiến không thể tạo mục tiêu 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 của tệp đầu ra.

--compilation_mode (fastbuild|opt|dbg) (-c)

Lựa chọn --compilation_mode (thường được viết tắt thành -c, đặc biệt là -c opt) sẽ lấy đối số là fastbuild, dbg hoặc opt và ảnh hưởng đến nhiều hoạt động tạo mã C/C++ như mức độ tối ưu hoá và mức độ hoàn chỉnh 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 đã 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 đã bật tính năng tối ưu hoá và với assert() cuộc gọi bị tắt (-O2 -DNDEBUG). Thông tin gỡ lỗi sẽ không được tạo ở chế độ opt trừ phi bạn cũng vượt qua --copt -g.

--cpu=cpu

Tuỳ chọn này chỉ định cấu trúc CPU mục tiêu sẽ được dùng để biên dịch các tệp nhị phân trong quá trình tạo 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 này, giá trị sẽ được lấy từ môi trường gọi hoặc theo cặp name=value, cặp này sẽ đặ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, lệnh gán mới nhất sẽ chiến 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 thà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 hành động 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 quá trình đóng bắc cầu của các mục tiêu cần xây dựng được lên lịch thực thi. --experimental_extra_action_filter sẽ hạn chế việc lên lịch đối với extra_actions trong đó nhãn của chủ sở hữu khớp với nhãn được chỉ định biểu thức chính quy.

Ví dụ sau đây sẽ giới hạn việc lên lịch cho 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 kiến trúc CPU cần được dùng để tạo các công cụ lưu trữ.

--android_platforms=platform[,platform]*

Các nền tảng để tạo deps bắc cầu của Quy tắc android_binary (dành riêng cho các phần phụ thuộc gốc như C++). Cho ví dụ: nếu cc_library xuất hiện trong deps bắc cầu của một android_binary quy tắc. Quy tắc này được tạo một lần cho mỗi nền tảng được chỉ định bằng --android_platforms cho quy tắc android_binary, đồng thời được đưa vào quy tắc cuối cùng đầu ra.

Không có giá trị mặc định nào cho cờ này: một nền tảng Android tuỳ chỉnh phải được xác định và sử dụng.

Một tệp .so được tạo và đóng gói trong APK cho mỗi nền tảng được chỉ định cùng với --android_platforms. Tên của tệp .so sẽ thêm tiền tố "lib" vào tên của quy tắc android_binary. Ví dụ: nếu tên của android_binary là "foo", thì tệp 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 đưa vào biểu thức và không khớp với bất kỳ biểu thức loại trừ nào sẽ được tạo với các tuỳ chọn đã cho. Tính năng so khớp nhãn sử dụng mẫu nhãn chính tắc (ví dụ: //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.

Để so khớp các tệp được tạo (chẳng hạn như đầu ra genrule), Bazel chỉ có thể sử dụng đường dẫn thực thi. Trong trường hợp này, biểu thức chính quy không nên bắt đầu bằng "//" vì 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 là base.

Bạn có thể sử dụng lựa chọn này nhiều lần.

Tuỳ chọn này được áp dụng bất kể chế độ biên dịch đượ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 ký hiệu có thể bị xoá trong quá trình liên kết. Bạn có thể ngăn chặ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à dùng - để xác định loại trừ mẫu. option là viết tắt của một tuỳ chọn được truyền qua cho 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ỉ có tuỳ chọn đầu tiên @ dùng để phân tách biểu thức chính quy khỏ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-fprofile-arcs vào lệnh dòng 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ế độ:

  • 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ả mục tiêu một cách linh động. Thao tác này sẽ đẩy nhanh thời gian liên kết và giảm kích thước của 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. Thông tin này hữu ích cho bazelrc phần cài đặt. Khi được đặt thành yes, tính năng Phân tách sẽ được bật rộng rãi. Khi bạn đặt thành no, tính năng Phân hạch sẽ bị tắt trên toàn cầu. Mặc định là no.

--force_ignore_dash_static

Nếu bạn đặt cờ này, mọi tuỳ chọn -static trong linkopts của các tệp BUILD theo 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"). Mặc định là vô hiệu hoá.

--android_resource_shrinking

Chọn xem có thực hiện rút gọn tài nguyên cho quy tắc android_binary hay không. Đặt giá trị mặc định cho thuộc tính shrink_resources bật các quy_tắc_nhị_android; hãy 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ả các quá trình 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 thực thi, 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ụ chéo dùng để biên dịch các quy tắc C/C++ trong deps bắc cầu của objc*, ios* và apple*. Đối với các mục tiêu đó, cờ này sẽ ghi đè --crosstool_top.

--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) được sử dụng để biên dịch tệp nhị phân trong quá trình tạo bản 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

Không dùng nữa. Bạn không nên chỉ định trực tiếp giá trị này.

Tuỳ chọn này chỉ định chuỗi công cụ nền tảng/SDK Android và thư viện Android Runtime sẽ được dùng để tạo bất kỳ .

SDK Android sẽ tự động được chọn nếu android_sdk_repository được xác định trong tệp WORKSPACE.

--java_toolchain=label

Không hoạt động. Chỉ được giữ lại để đảm bảo khả năng tương thích ngược.

--host_java_toolchain=label

Không hoạt động. Chỉ giữ lại để tương thích ngược.

--javabase=(label)

Không hoạt động. Chỉ giữ lại để tương thích ngược.

--host_javabase=label

Không hoạt động. Chỉ giữ lại để tương thích ngược.

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 gây ả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 chúng là đối với tốc độ của bản dựng.

--spawn_strategy=strategy

Tuỳ chọn này kiểm soát địa điểm và cách thức thực thi lệnh.

  • standalone khiến các lệnh được thực thi dưới dạng quy trình phụ cục bộ. Giá trị này là không dùng nữa. Thay vào đó, hãy sử dụng local.
  • sandboxed thực thi các lệnh bên trong hộp cát trên máy cục bộ. Để làm được như vậy, tất cả các tệp đầu vào, phần phụ thuộc của dữ liệu và công cụ đều phải được liệt kê là trong các thuộc tính srcs, datatools. Bazel bật hộp cát cục bộ theo mặc định trên các hệ thống hỗ trợ thực thi 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 khiến các lệnh được thực thi bằng một worker liên tục (nếu có).
  • docker khiến các lệnh được thực thi bên trong hộp cát Docker trên máy cục bộ. Bạn 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

Lựa chọn này kiểm soát địa điểm và cách thức thực thi các lệnh, ghi đè phương thức --spawn_strategy (và --genrule_strategy có khả năng ghi nhớ quy tắc chung) trên cơ sở từng ghi 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>

Lựa chọn này chỉ định chiến lược nào 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. Xem --per_file_copt để biết thông tin chi tiết về 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 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 sử dụng local nếu nội dung mô tả của biểu mẫu này khớp với //foo.*.cc nhưng không khớp với //foo/bar.
  • Ví dụ: --strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed chạy "Compiling //foo/bar/baz" (Biên dịch //foo/bar/baz) bằng chiến lược sandboxed, nhưng việc đảo ngược thứ tự sẽ chạy bằng local.
  • 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ược local và quay lại sandboxed nếu không thành công.

--genrule_strategy=strategy

Đây là viết tắt không còn được dùng nữa của --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 độ về các công việc chưa đã hoàn tất (chẳng hạn như các thử nghiệm chạy trong thời gian dài). Tùy chọn này sẽ đặ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 gia tăng: thuật toán đầu tiên báo cáo sẽ được in sau 10 giây, sau đó là 30 giây và tiến trình đó đượ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

Những tuỳ chọn này chỉ định dung lượng tài nguyên cục bộ (RAM tính bằng MB và số lõi logic của CPU) mà Bazel có thể cân nhắc khi lên lịch các hoạt động xây dựng và kiểm thử để chạy cục bộ. Họ mất một số nguyên hoặc một từ khoá (HOST_RAM hoặc HOST_CPUS) (không bắt buộc) 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 là độc lập; 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ộ.

Tuỳ chọn này được bật theo mặc định, chỉ định liệu các đường liên kết tượng trưng của tệp chạy cho các chương trình kiểm thử và tệp nhị phân có được tạo trong thư mục đầu ra hay không. Việc sử dụng --nobuild_runfile_links có thể hữu ích để xác thực xem tất cả các mục tiêu có biên dịch mà không 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 thời gian chạy của chúng sẽ được thu thập lại với nhau ở 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 thực thi kiểm thử, bạn có thể truy cập vào các tệp chạy bằng cách sử dụng đường dẫn của biểu mẫu $TEST_SRCDIR/canonical_repo_name/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 theo mặc định, cây runfiles được triển khai bằng cách tạo một tập hợp liên kết tượng trưng đến các tệp được yêu cầu. 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, do đó 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 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. Tùy 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ó đ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 gắn liền với giai đoạn thực thi của thì bản dựng cũng ảnh hưởng đến giai đoạn phân tích: nếu một vài mục tiêu được chỉ định trong lệnh tạo, nhưng chỉ một số lệnh có thể được đã phân tích thành công, bản dựng sẽ dừng kèm theo lỗi trừ khi --keep_going được chỉ định. Trong trường hợp đó, giá trị sẽ chuyển sang giai đoạn thực thi nhưng chỉ đối với 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 java_library nhắm mục tiêu do Bazel biên soạn. 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 thành viên 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)) và sử dụng các tệp jar giao diện để biên dịch các mục tiêu phụ thuộc. Điều này giúp bạn có thể tránh việc biên dịch lại khi chỉ thay đổ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

Tùy chọn này bật đối tượng dùng chung giao diện, tạo tệp nhị phân và các thư viện dùng chung khác phụ thuộc vào giao diện của một đối tượng dùng chung, thay vì triển khai. Khi chỉ có việc triển khai thay đổi, 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 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 *_testtest_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ứ đã yêu cầu, bao gồm *_testtest_suite quy tắc được lọc ra từ kiểm thử. Điều này hữu ích vì chạy bazel test --build_tests_only foo/... có thể không phát hiện được tất cả bản dựng sự cố hỏng trong cây foo.

--[no]check_up_to_date

Tuỳ chọn này khiến Bazel không thực hiện một bản dựng mà chỉ kiểm tra xem tất cả các mục tiêu được chỉ định đã được cập nhật hay chưa. 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ó bất kỳ tệp nào nằm ngoài ngày, thay vì được tạo, một lỗi sẽ được báo cáo và bản dựng 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 so với chỉnh sửa nguồn (ví dụ: đối với lượt gửi trước kiểm tra) mà không làm phát sinh chi phí 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 các tệp đối số. Thông tin này hữu ích cho các tệp nguồn kiểm tra cú pháp trong IDE, ví dụ: bằng cách tạo lại một mục tiêu phụ thuộc vào tệp nguồn nhằm phát hiện lỗi sớm nhất là có thể thực hiện 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ả đối số không phải cờ: mỗi đối số phải là nhãn mục tiêu tệp hoặc tên tệp thuần tuý tương ứng với thư mục đang hoạt động và một quy tắc phụ thuộc vào từng tên tệp nguồn được tạo. Cho C++ và Java thì các quy tắc trong cùng không gian ngôn ngữ sẽ được ưu tiên chọn. Cho nhiều quy tắc có cùng tùy chọn, quy tắc sẽ xuất hiện đầu tiên trong mục Tệp BUILD được chọn. Mẫu đích được đặt tên rõ ràng như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 các tệp .s (mã trình kết hợp), .i (đã xử lý trước C) và .ii (đã xử lý trước C++). Những kết quả này thường hữu ích khi gỡ lỗi. Nhiệt độ sẽ chỉ là được tạo cho tập hợp các mục tiêu được chỉ định trên dòng lệnh.

Cờ --save_temps hiện chỉ hoạt động đối với các quy tắc cc_*.

Để đảm bảo rằng Bazel in vị trí của các tệp đầu ra bổ sung, hãy kiểm tra để đảm bảo --show_result n của bạn cài đặt đủ 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ó thẻ bị loại trừ nào. Thẻ xây dựng được chỉ định dưới dạng danh sách từ khóa thẻ được phân tách bằng dấu phẩy, tùy chọn đứng sau '-' ký hiệu này 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 bỏ qua --build_tag_filters đối với các mục tiêu kiểm thử, được tạo và chạy ngay cả khi chúng không phù hợp với bộ lọc này. Để tránh tạo các mục tiêu đó, hãy lọ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. Kiểm tra bộ lọc kích thước được chỉ định dưới dạng danh sách các giá trị kích thước thử nghiệm được phép phân tách bằng dấu phẩy (nhỏ, trung bình, lớn hoặc rất lớn), tuỳ ý đứng sau "-" dấu dùng để biểu thị kích thước thử nghiệm 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ẽ chỉ kiểm thử (hoặc tạo nếu --build_tests_only cũng được chỉ định) các mục tiêu kiểm thử có thời gian chờ đã cho. Bộ lọc thời gian chờ kiểm thử được chỉ định dưới dạng danh sách 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 ví dụ về cú pháp.

Theo mặc định, tính năng lọc thời gian chờ kiểm thử sẽ không được áp dụng.

--test_tag_filters=tag[,tag]*

Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo 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ừ. Thẻ thử nghiệm được chỉ định dưới dạng danh sách từ khóa thẻ được phân tách bằng dấu phẩy, tùy chọn đứng sau '-' ký hiệu này 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 "+" đứng trước.

Ví dụ:

  % bazel test --test_tag_filters=performance,stress,-flaky //myproject:all

sẽ thử nghiệm các mục tiêu được gắn thẻ bằng performance hoặc stress nhưng không được gắn thẻ bằng thẻ flaky.

Theo mặc định, tính năng lọc thẻ kiểm thử sẽ không được áp dụng. Xin lưu ý rằng bạn cũng có thể lọc trên các thẻ sizelocal của thử nghiệm trong theo cách này.

--test_lang_filters=string[,string]*

Chỉ định danh sách các chuỗi được phân tách bằng dấu phẩy, tham chiếu đến tên của các lớp quy tắc kiểm thử. Để tham chiếu đến lớp quy tắc foo_test, hãy sử dụng chuỗi "foo". Bazel sẽ chỉ kiểm thử (hoặc tạo bản dựng nếu --build_tests_only cũng được chỉ định) mục tiêu của các lớp quy tắc được tham chiếu. Để loại trừ các mục tiêu đó, hãy sử dụng chuỗi "-foo". Ví dụ:

  % bazel test --test_lang_filters=foo,bar //baz/...

sẽ chỉ thử nghiệm các mục tiêu là bản sao của foo_test hoặc bar_test trong //baz/..., trong khi

  % bazel test --test_lang_filters=-foo,-bar //baz/...

sẽ thử nghiệm tất cả mục tiêu trong //baz/... ngoại trừ foo_test và Thực thể bar_test.

--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 các bài kiểm thử đang 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 lên đến khung kiểm thử chịu trách nhiệm chạy kiểm thử. Đó có thể là một glob, chuỗi con hoặc regexp. --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 độ chi tiết cho đầu ra của Bazel, vào thiết bị đầu cuối hoặc vào 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. Đã có lời giải thích vào logfile.

Nếu bạn gặp phải tình huống tạo lại không mong muốn, lựa chọn này có thể giúp hiểu lý do. Thêm lớp này vào .bazelrc để quá trình ghi nhật ký diễn ra cho tất cả các bản dựng tiếp theo, sau đó kiểm tra nhật ký khi bạn thấy một bước thực thi được thực thi ngoài dự kiến. Lựa chọn này có thể ảnh hưởng không đáng kể đến hiệu suất, nên bạn có thể muốn xoá khi không còn cần đến.

--verbose_explanations

Lựa chọn này giúp tăng độ chi tiết của nội dung giải thích được tạo khi bật lựa chọn --explain.

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 để thì kết quả trong tệp giải thích sẽ thay đổi bao gồm toàn bộ thông tin chi tiết của lệnh mới (ít nhất là đối với hầu hết ).

Việc sử dụng tuỳ chọn này có thể làm tăng đáng kể độ dài của tệp giải thích được tạo và mức phạt hiệu suất khi sử dụng --explain.

Nếu bạn chưa bật --explain, thì --verbose_explanations 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 đó, dữ liệu này có thể được phân tích hoặc phân tích cú pháp bằng cách sử dụ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 tiến trình tải gói tin nhắn. Nếu chế độ cài đặt này bị tắt, các thông báo sẽ không hiển thị.

--[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 về tiến trình mỗi n giây, với 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 in một thông báo cho biết liệu hay không thì mục tiêu đã được cập nhật thành công và 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ô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 hoặc một vài mục tiêu cho các bản dựng lớn (chẳng hạn như toàn bộ một cấp cao nhất cây dự án), thông tin này có thể gây choáng ngợp và mất tập trung; tuỳ chọn này cho phép bạn kiểm soát nó. --show_result lấy một đối số số nguyên, là số mục tiêu tối đa cần in thông tin kết quả đầy đủ. Theo mặc định, giá trị này là 1. Không có thông tin kết quả nào vượt quá ngưỡng này hiển thị cho các mục tiêu riêng lẻ. Do đó, số không dẫn đến kết quả thông tin luôn bị chặn và do đó, giá trị rất lớn kết quả luôn được in.

Người dùng có thể muốn chọn một giá trị ở giữa nếu họ thường xuyên xen kẽ giữa việc xây dựng một nhóm nhỏ các mục tiêu (ví dụ: trong chu trình 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 không gian làm việc mới hoặc chạy hồi quy). Trong trường hợp trước, thông tin kết quả rất hữu ích, trong khi trong trường hợp sau, thông tin kết quả ít hữu ích hơn. Giống như tất cả các tuỳ chọn, bạn có thể chỉ định tuỳ chọn này một cách ngầm ẩn thông qua tệp .bazelrc.

Các tệp được in để bạn dễ dàng sao chép và dán tên tệp vào shell, để chạy các tệp thực thi được tạo. Số liệu "cập nhật" hoặc "không thành công" thông báo cho từng mục tiêu có thể dễ dàng được phân tích cú pháp bằng tập lệnh để thúc đẩy một 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ác tệp có thể nhìn thấy đượ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.

  >>>>> # //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. (Dấu ngoặc đơn xung quanh được cung cấp để bảo vệ shell của bạn khỏi các lệnh gọi cdexec; hãy nhớ sao chép các dấu ngoặc đơn đó!) Tuy nhiên, một số lệnh được triển khai nội bộ trong Bazel, chẳng hạn như tạo cây liên kết tượng trưng. Đối với các lệnh này, không có dòng lệnh nào hiển thị.

Có thể chuyển --subcommands=pretty_print để in các đối số của lệnh dưới dạng danh sách thay vì dưới dạng một dòng. Việc này có thể giúp các dòng lệnh dài dễ đọc hơn.

Hãy xem thêm --verbose_failures bên dưới.

Để ghi nhật ký 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--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ực hiện được thao tác. Điều này có thể rất hữu ích khi gỡ lỗi một bản dựng không thành công.

Các lệnh không đạt được in theo cú pháp tương thích với shell Bourne, phù hợp để sao chép và dán vào dấu nhắc lệnh shell.

Trạng thái 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êm thông tin 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 lý do khác.

--workspace_status_command=program

Cờ này cho phép bạn chỉ định 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 không hoặc nhiều cặp khoá/giá trị tới đầu ra chuẩn, một mục nhập trên mỗi dòng, 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ỳ tên nào, nhưng chỉ 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à "không ổn định". (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 ghi các cặp khoá-giá trị thành hai tệp:

  • bazel-out/stable-status.txt chứa mọi khoá và giá trị mà tên khoá bắt đầu bằng STABLE_
  • 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 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 hành động đượ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:

    • 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ạy
    • BUILD_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 mong muốn họ luôn thay đổi, chẳng hạn như và cập nhật hợp lệ bazel-out/volatile-status.txt . 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 biến động là tệp duy nhất có nội dung đã thay đổi, thì Bazel sẽ không vô hiệu hoá những hành động phụ thuộc vào điều đó. Nếu thông tin đầu vào khác của hành động đã thay đổi, thì Bazel sẽ chạy lại thao tác đó và thao tác sẽ thấy biến động được cập nhật trạng thái biến động, nhưng việc chỉ thay đổi trạng thái biến động sẽ không vô hiệu hoá hành động.

    Bazel luôn xuất ra các khoá tự tính toán lại sau đây:

    • BUILD_TIMESTAMP: thời gian của bản dựng tính bằng giây kể từ thời gian bắt đầu của hệ thống Unix (giá trị của System.currentTimeMillis() chia cho một nghìn)
    • FORMATTED_DATE: thời gian của bản dựng Được định dạng là yyyy MMM d HH mm ss EEE(ví dụ: 2023 Jun 2 01 44 29 Fri) theo giờ UTC.

Trên Linux/macOS, bạn có thể truyền --workspace_status_command=/bin/true để tắt 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 để có được cùng một hiệu quả.

Nếu lệnh trạng thái không gian làm việc không thành công (thoát khác 0) vì bất kỳ lý do gì, 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 và tệp trạng thái ổn định sẽ bao gồm các dòng ỔN ĐỊNH và tệp trạng thái biến động sẽ bao gồm các dòng còn lại.

--[no]stamp

Lựa chọn này, cùng với thuộc tính quy tắc stamp, kiểm soát việc nhúng thông tin bản dựng trong tệp nhị phân.

Có thể bật hoặc tắt tính năng đóng dấu một cách rõ ràng theo từng quy tắc bằng cách sử dụng Thuộc tính stamp. Vui lòng tham khảo Bách khoa toàn thư về xây dựng để biết 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 tính năng đóng dấu có được bật 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 thực thi, 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), dấu sẽ bị tắt bất kể --[no]stamp. Việc chỉ định --stamp không buộc phải tạo lại các mục tiêu nếu các phần phụ thuộc của mục tiêu đó 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 sẽ 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 những tuỳ chọn này để kiểm soát nền tảng lưu trữ và nền tảng đích giúp định cấu hình cách hoạt động của các bản dựng và để kiểm soát những nền tảng thực thi và chuỗi công cụ có sẵn cho quy tắc Bazel.

Vui lòng xem thông tin cơ bản về Nền tảngChuỗ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 MODULE.bazel bằng register_execution_platforms(). Tuỳ chọn này chấp nhận danh sách nền tảng được phân tách bằng dấu phẩy theo thứ tự ưu tiên. Nếu cờ này được truyền nhiều lần, thì giá trị ghi đè gần đây nhất.

--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ụ. Chuỗi công cụ có thể được chỉ định theo mục tiêu chính xác hoặc dưới dạng mẫu mục tiêu. Những chuỗi công cụ này sẽ được xem xét trước những nội dung được khai báo trong tệp MODULE.bazel bằng cách 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. Biểu thức chính quy có thể là bị phủ định bằng cách sử dụng - ở đầu. Việc này có thể giúp nhà phát triển của các quy tắc Bazel hoặc Starlark có 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 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.

Thay đổi tiền tố của các đường liên kết tượng trưng tiện lợi được tạo. Giá trị mặc định cho tiền tố đường liên kết tượng trưng là bazel-. Giá trị này sẽ tạo các đường liên kết tượng trưng bazel-bin, bazel-testlogsbazel-genfiles.

Nếu không thể tạo liên kết tượng trưng vì bất kỳ lý do gì, một cảnh báo sẽ được nhưng bản dựng vẫn được coi là thành công. Cụ thể, Thao tác này cho phép bạn tạo trong một thư mục chỉ đọc hoặc một thư mục mà bạn không có quyền ghi vào. Mọi đường dẫn được in trong 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:

  • 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ỳ liên kết tượng trưng nào, bao gồm bazel-outbazel-<workspace> đường liên kết tượng trưng. Sử dụng tuỳ chọn này để ngăn 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 một 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 nếu khô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 hoàn chỉnh' rượu sake.

--starlark_cpu_profile=_file_

Cờ này (có giá trị là tên của một tệp) khiến Bazel thu thập số liệu thống kê về mức sử dụng CPU của tất cả các luồng Starlark, và viết hồ sơ, ở định dạng pprof vào tệp được đặt tên.

Sử dụng tuỳ chọn này để xác định các hàm Starlark làm cho việc tải và phân tích bị chậm do phải tính toán quá mức. Ví dụ:

$ bazel build --nobuild --starlark_cpu_profile=/tmp/pprof.gz my/project/...
$ pprof /tmp/pprof.gz
(pprof) top
Type: CPU
Time: Feb 6, 2020 at 12:06pm (PST)
Duration: 5.26s, Total samples = 3.34s (63.55%)
Showing nodes accounting for 3.34s, 100% of 3.34s total
      flat  flat%   sum%        cum   cum%
     1.86s 55.69% 55.69%      1.86s 55.69%  sort_source_files
     1.02s 30.54% 86.23%      1.02s 30.54%  expand_all_combinations
     0.44s 13.17% 99.40%      0.44s 13.17%  range
     0.02s   0.6%   100%      3.34s   100%  sorted
         0     0%   100%      1.38s 41.32%  my/project/main/BUILD
         0     0%   100%      1.96s 58.68%  my/project/library.bzl
         0     0%   100%      3.34s   100%  main

Đối với các chế độ xem khác nhau của cùng một dữ liệu, hãy thử các lệnh pprof svg, weblist.

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, có thể thuận tiện để phân biệt từng công trình có mã nhận dạng riêng biệt, chẳng hạn như "64 bit" so với "32 bit". Lựa chọn này sẽ phân biệt các đường liên kết tượng trưng bazel-bin (v.v.).

Đang chạy kiểm thử

Để tạo và chạy kiểm thử bằng bazel, hãy nhập bazel test rồi đến 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 *_testtest_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 dẫn đến mức tăng tốc độ.

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
  • đã yêu cầu nhiều lần chạy kiểm thử với --runs_per_test
  • kiểm thử không thành công.

Nếu là "không", tất cả các 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.

Những 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 để ghi đè tuỳ chọn 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 kiểm thử mà chỉ kiểm tra và báo cáo kết quả kiểm tra được lưu vào bộ nhớ đệm. Nếu có bất kỳ thử nghiệm nào chưa được được tạo và chạy trước đó hoặc kết quả kiểm thử của ứng dụng đó đã lỗi thời (ví dụ: vì mã nguồn hoặc tuỳ chọn bản dựng đã thay đổi), sau đó Bazel sẽ báo cáo một thông báo lỗi ("kết quả kiểm tra không được cập nhật"), sẽ ghi lại trạng thái là "NO STATUS" (có màu đỏ, nếu đầu ra màu được bật) và sẽ trả về một mã thoát khác 0.

Tuỳ chọn này cũng ngụ ý hành vi --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 hết thời gian chờ 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 chương trình kiểm thử thường thực thi trong vòng 1 hoặc 2 phút thì không thời gian chờ ETERNAL hoặc LONG vì những khoảng thời gian này rất hào phóng.

Tuỳ chọn này hữu ích trong việc 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ác giá trị thời gian chờ hiện có.

--[no]test_keep_going

Theo mặc định, tất cả các chương trình kiểm thử đều chạy cho đến khi hoàn tất. Nếu cờ này bị vô hiệu hoá, tuy nhiên, bản dựng sẽ bị huỷ trong mọi kiểm thử không vượt qua. Các bước xây dựng và lệnh gọi kiểm thử tiếp theo sẽ không chạy và các lệnh gọi đang diễn ra sẽ bị huỷ. Không chỉ định cả --notest_keep_going--keep_going.

--flaky_test_attempts=attempts

Lựa chọn này quy định số lần thử nghiệm tối đa nếu không thành công vì bất kỳ lý do gì. Thử nghiệm ban đầu không thành công nhưng cuối cùng thành công được báo cáo dưới dạng FLAKY trên tóm tắt kiểm thử. Đó là, tuy nhiên, được coi là được thông qua khi xác định mã thoát Bazel hoặc tổng số bài kiểm tra đã thành công. Các lượt kiểm thử không thành công trong tất cả các lượt thử được phép sẽ được coi là không thành công.

Theo mặc định (khi bạn không chỉ định tuỳ chọn này hoặc khi bạn đặt tuỳ chọn này thành mặc định), bạn chỉ được phép thử một lần đối với các kiểm thử thông thường và 3 lần đối với các quy tắc kiểm thử có 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ần thử nghiệm để ngăn chặn hành vi lạm dụng hệ thống.

--runs_per_test=[regex@]number

Tuỳ chọn này chỉ định số lần thực thi mỗi chương trình 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 số duy nhất, thì tất cả các lượt 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 biểu thức chính quy@số. Điều này ràng buộc hiệu ứng của --runs_per_test đối với các mục tiêu khớp với biểu thức chính quy (--runs_per_test=^//pizza:.*@4 chạy tất cả các thử nghiệm 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 chạy cho một phân đoạn duy nhất không thành công và một hoặc nhiều lần chạy cho cùng một phân đoạn, thì mục tiêu sẽ là bị coi là không ổn định với lá cờ. 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 tương tự như short, nhưng còn ngắn hơn nữa: chỉ in thông tin về các chương trình 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ị đầu ra 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. Ngoài ra, còn cho biết tên tệp nhật ký đầu ra cho các chương trình kiểm thử không thành công. Tóm tắt sẽ được in ở cuối quá trình tạo bản dựng (trong quá trình tạo bản dựng, người dùng sẽ thấy rằng chỉ là các thông báo tiến trình đơn giản khi quá trình kiểm thử bắt đầu, đạt hoặc không đạt). Đâ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 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 kiểm thử đã 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 bài kiểm thử java phải đợi kết nối từ một Trình gỡ lỗi tuân thủ JDWP trước khi bắt đầu kiểm thử. Tuỳ chọn này ngụ ý --test_output=streamed.

--[no]verbose_test_summary

Theo mặc định, tuỳ chọn này được bật, dẫn đến thời gian thử nghiệm và các thông tin (chẳng hạn như các lần thử kiểm tra) được in vào tóm tắt kiểm thử. Nếu --noverbose_test_summary đã được chỉ định, bản tóm tắt thử nghiệm sẽ chỉ bao gồm tên thử nghiệm, trạng thái thử nghiệm và chỉ báo thử nghiệm được lưu vào bộ nhớ đệm và sẽ được định dạng để không vượt quá 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 này sẽ sẽ được xoá ở đầ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 lần kiểm thử bằng cách sử dụng số lượng giây 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, có thể cung cấp 4 giá trị được phân tách bằng dấu phẩy, trong đó chỉ định thời gian chờ riêng cho các thử nghiệm ngắn, trung bình, dài và vĩnh viễn (trong đó đơn đặt hàng). 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ả thử nghiệm theo suy luận giới hạn thời gian chờ từ kích thước của kiểm thử, liệu kích thước được đặt ngầm hoặc 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" không có thời gian chờ rõ ràng.

--test_arg=arg

Truyền các tuỳ chọn/cờ/đối số dòng lệnh đến từng quy trình kiểm thử. Bạn có thể sử dụng 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.

Xin lưu ý rằng, không giống như lệnh bazel run, bạn không thể truyền trực tiếp đối số kiểm thử như trong bazel test -- target --logtostderr --v=3. Đó là vì các đối số không liên quan được truyền đến bazel test được hiểu là phép kiểm thử bổ sung mục tiêu. Tức là --logtostderr--v=3 sẽ được diễn giải là một mục tiêu kiểm thử. Sự mơ hồ này không tồn tại đối với lệnh bazel run, lệnh này chỉ chấp nhận một mục tiêu.

Bạn có thể truyền --test_arg đến lệnh bazel run, nhưng lệnh này sẽ bị bỏ qua trừ phi lệnh đang chạy là một mục tiêu thử nghiệm. (Giống như mọi cờ khác, nếu được truyền trong lệnh bazel run sau mã thông báo --, cờ này sẽ không được Bazel xử lý mà được chuyển tiếp nguyên văn đến mục tiêu đã thực thi.)

--test_env=variable=_value_ HOẶC --test_env=variable

Chỉ định các biến bổ sung phải được chèn vào môi trường kiểm thử cho mỗi lần kiểm thử. Nếu bạn không chỉ định value, kế thừa từ môi trường shell dùng để khởi động 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 đó. Chiến lược phát hành đĩa đơn command-prefix được tách thành các từ bằng cách sử dụng shell Bourne quy tắc mã hoá và sau đó danh sách các từ được thêm vào trước lệnh được thực thi.

Nếu từ đầu tiên là một nhãn đủ điều kiện (bắt đầu bằng //). Sau đó, nhãn sẽ đượ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.

Bạn cần lưu ý một số điều sau:

  • PATH được dùng để chạy thử nghiệm 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 phải sử dụng đường dẫn tuyệt đối cho --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ữ. Sự tiện lợi bộ lọc tên chung có thể chuyển tiếp đối số lọc cho 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ừ giá trị 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 thông thường (//java/myapp:myapp chào và in các đối số của phiên):

  % bazel run java/myapp:myapp -- --arg1 --arg2
  INFO: Analyzed target //java/myapp:myapp (13 packages loaded, 27 targets configured).
  INFO: Found 1 target...
  Target //java/myapp:myapp up-to-date:
    bazel-bin/java/myapp/myapp
  INFO: Elapsed time: 14.290s, Critical Path: 5.54s, ...
  INFO: Build completed successfully, 4 total actions
  INFO: Running command line: bazel-bin/java/myapp/myapp <args omitted>
  Hello there
  $EXEC_ROOT/java/myapp/myapp
  --arg1
  --arg2

bazel run tương tự nhưng không giống 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 này không hoàn hảo và các chương trình kiểm thử có nhiều phân đoạn không thể chạy theo cách này ( Bạn có thể dùng tuỳ chọn dòng lệnh --test_sharding_strategy=disabled để giải quyết vấn đề này)

Tệp nhị phân cũng có các biến môi trường bổ sung sau:

  • 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.

Những công cụ này có thể được sử dụng, chẳng hạn, để diễn giải tên tệp trên dòng lệnh trong 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 kết quả ghi nhật ký từ Bazel

Khi gọi một tệp nhị phân bằng bazel run, Bazel sẽ in kết quả ghi nhật ký từ Bazel và tệp nhị phân trong lệnh gọi. Để nhật ký ít bị ồn hơn, bạn có thể loại bỏ dữ liệu đầu ra từ chính Bazel bằng --ui_event_filters và Cờ --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 động của chạy kiểm thử trong môi trường gần đúng với môi trường được mô tả tại Kiểm thử viết. Lưu ý rằng không có Các đối số --test_* có ảnh hưởng khi chạy kiểm thử theo cách này, ngoại trừ --test_arg .

Dọn dẹp dữ liệu đầu ra của 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, sau đó là thư mục đầu ra cho tất cả cấu hình sẽ bị làm 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, do đó, lệnh clean sẽ xoá tất cả đầu ra từ tất cả 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 Bazel tạo , bạn có thể chỉ định tuỳ chọn --expunge. Thời gian được thực thi bằng --expunge, thì lệnh sạch chỉ đơn giản là sẽ xoá toàn bộ cây cơ sở đầu ra, ngoài việc tạo bản dựng chứa tất cả các tệp tạm thời do Bazel tạo. Lệnh này cũng dừng máy chủ Bazel sau khi dọn 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ể dọn sạch 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 như một phương tiện lấy lại dung lượng ổ đĩa cho 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 tìm bản dựng tăng dần không chính xác, gửi báo cáo lỗi và báo cáo lỗi trong các công cụ thay vì sử dụng clean.

Truy vấn biểu đồ phần phụ thuộc

Bazel sử dụng một ngôn ngữ truy vấn để đặt câu hỏi về biểu đồ phần phụ thuộc dùng trong quá trình tạo bản dựng. Ngôn ngữ truy vấn được sử dụng bằng 2 lệnh: query và cquery. Điểm khác biệt chính giữa có hai lệnh là truy vấn chạy sau giai đoạn tải và cquery sẽ chạy sau giai đoạn phân tích. Những công cụ này là trợ giúp vô cùng quý giá cho nhiều công việc kỹ thuật phần mềm.

Ngôn ngữ truy vấn dựa trên ý tưởng về các phép tính đại số trên đồ thị; đượ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ố dòng lệnh . --output sẽ 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 thao tác, cấu phần phần mềm và mối quan hệ của chúng.

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, buildfilestests.

Để 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 sự trợ giúp trực tuyến. Theo mặc định, hiển thị bản tóm tắt các lệnh hiện có và chủ đề trợ giúp, như minh hoạ trong Xây dựng cùng Bazel. Việc chỉ định một đối số sẽ hiển thị trợ giúp chi tiết cho một đối số cụ thể chủ đề. 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 bổ sung không tương ứng với các lệnh.

--[no]long (-l)

Theo mặc định, bazel help [topic] chỉ in một phần tóm tắt các lựa chọn có 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 không hoạt động (ví dụ: sau khi hoàn thành một bản dựng bất kỳ hoặc các lệnh hiện đang thực hiện). Để biết thêm thông tin, hãy xem Triển khai ứng dụng/máy chủ.

Các máy chủ Bazel tự dừng sau khi hết thời gian chờ ở trạng thái không hoạt động, vì vậy, lệnh này hiếm khi cần thiết; Tuy nhiên, mã này có thể hữu ích trong tập lệnh khi biết rằng sẽ không có phiên tạo nào khác diễn 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ụ. Đây là hữu ích cho các tập lệnh khởi tạo nhiều bản dựng, như bất kỳ bộ nhớ nào rò rỉ trong máy chủ Bazel có thể khiến máy chủ gặp sự cố một cách bất ngờ occasion; việc thực hiện khởi động lại có điều kiện sẽ giành quyền ưu tiên điều kiện này.

info

Lệnh info in nhiều giá trị liên kết với phiên bản máy chủ Bazel hoặc với một cấu hình bản dựng cụ thể. (Các tập lệnh điều khiển bản dựng có thể sử dụng các tập lệnh này.)

Lệnh info cũng cho phép một (không bắt buộc) , là tên của một trong các khoá trong danh sách bên dưới. Trong trường hợp này, bazel info key sẽ chỉ in giá trị cho một khoá đó. (Điều này đặc biệt thuận tiện khi 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 không phụ thuộc vào 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 không gian làm việc cơ sở thư mục.
  • 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 sản xuất cài đặt các tệp thực thi được yêu cầu nội bộ bên dưới thư mục này.

  • output_base: đường dẫn tuyệt đối đến kết quả cơ sở thư mục mà thực thể Bazel này sử dụng cho người dùng hiện tại và không gian làm việc. Bazel sử dụng tất cả những gì chưa từng có bên dưới thư mục này.

  • execution_root: đường dẫn tuyệt đối đến điểm thực thi thư mục gốc 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à lệnh 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 kết quả đầu ra bên dưới gốc thực thi được dùng cho tất cả các tệp thực sự được tạo nhờ 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ên bazel-out sẽ được đặt tại đó trỏ đến thư mục này.

  • server_pid: mã nhận dạng quy trình của quy trình máy chủ Bazel.

  • server_log: đường dẫn tuyệt đối đến tệp nhật ký gỡ lỗi của máy chủ Bazel. Tệp này chứa thông tin gỡ lỗi cho tất cả các lệnh trong suốt thời gian hoạt động của Bazel và dành cho người dùng và các nhà phát triển Bazel sử dụng.

  • 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ạy bazel 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ừ khi bạn thay đổi chế độ cài đặt của --output_base hoặc Tuỳ chọn --output_user_root.

  • used-heap-size, committed-heap-size, max-heap-size: báo cáo nhiều tham số kích thước vùng nhớ khối xếp JVM. Tương ứng: bộ nhớ hiện đang được sử dụng, bộ nhớ hiện tại đảm bảo có sẵn cho JVM từ hệ thống, tối đa khả năng phân bổ tương ứng.

  • 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 ở đầu mỗi bản dựng.

  • package_path: Danh sách các đường dẫn được phân tách bằng dấu hai chấm mà bazel sẽ tìm kiếm gói. Có định dạng giống như đối số dòng lệnh bản dựng --package_path.

Ví dụ: Mã quy trình của máy chủ Bazel.

% bazel info server_pid
1285

Dữ liệu dành riêng cho cấu hình

Những dữ liệu này có thể chịu ảnh hưởng của các lựa chọn cấu hình được chuyển đến bazel info, cho ví dụ: --cpu, --compilation_mode, v.v. Lệnh info chấp nhận tất cả các tuỳ chọn kiểm soát phần phụ thuộc vì một số đơn vị đo lường sẽ 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ục bazel-* chứa các chương trình do bản dựng tạo ra. Điều này thường giống như các đường liên kết tượng trưng bazel-* được tạo trong thư mục không gian làm việc cơ sở sau tạo thành công. Tuy nhiên, nếu thư mục workspace là thư mục chỉ đọc, bạn không thể tạo đường liên kết tượng trưng bazel-*. Tập lệnh sử dụng giá trị do bazel info báo cáo, thay vì giả định của đường liên kết tượng trưng sẽ mạnh mẽ hơn.
  • Môi trường "Tạo" hoàn chỉnh. Nếu cờ --show_make_env là đã chỉ định, tất cả biến trong "Make" của cấu hình hiện tại môi trường cũng được hiển thị (chẳng hạn như CC, GLIBC_VERSION, v.v.). Đây là những biến được truy cập bằng $(CC) hoặc varref("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 giá trị 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).

% 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--version

Lệnh version in thông tin chi tiết về phiên bản của tệp nhị phân Bazel đã tạo, bao gồm cả danh sách thay đổi tại thời điểm tạo và ngày. 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ẽ đưa ra cùng một kết quả như bazel version --gnu_format, ngoại trừ không có tác dụng phụ của việc có thể bắt đầu máy chủ Bazel hoặc giải nén tệp lưu trữ máy chủ. bazel --version có thể chạy từ ở bất cứ đâu – phương thức này không yêu cầu thư mục không gian làm việc.

mobile-install

Lệnh mobile-install cài đặt ứng dụng 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 tài nguyên được tham chiếu từ AndroidManifest.xml, mã gốc hoặc Java (chẳng hạn như những tài nguyên được Class.getResource() tham chiếu đến). Nếu các yêu cầu này mọi thứ 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, đây là trách nhiệm của người dùng biết khi nào lệnh này đủ hiệu quả và khi cần cài đặt toàn bộ ứng dụng.

Nếu bạn đang dùng thiết bị chạy Marshmallow trở lên, hãy cân nhắc 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ỉ dùng được trên các thiết bị chạy Marshmallow trở lên. Lưu ý rằng --incremental cờ không cần thiết khi dùng --split_apks.

--start_app

Khởi động ứng dụng ở trạng thái mới sau khi cài đặt. Tương đương với --start=COLD.

--debug_app

Chờ trình gỡ lỗi được đính kèm trước khi khởi động ứng dụng ở trạng thái 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 được ứng dụng. Đây là tuỳ chọn 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.

Giá trị mặc định là sử dụng adb trong SDK Android được chỉ định bởi --android_sdk.

--adb_arg=serial

Các đối số bổ sung cho adb. Các lệnh này xuất hiện trước lệnh con trong dòng lệnh và thường dùng để chỉ định thiết bị sẽ 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 khi cài đặt gia tăng. Đặt thành 1 để đặt tính năng ghi nhật ký gỡ lỗi được in ra bảng điều khiển.

dump

Lệnh dump in để xuất chuẩn một tệp kết xuất của trạng thái nội bộ của máy chủ Bazel. Đây là lệnh chủ yếu để 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 xác định và có thể thay đổi.

Theo mặc định, lệnh sẽ chỉ in thông báo trợ giúp nêu ra các tuỳ chọn có thể dùng để kết xuất các khu vực cụ thể của trạng thái Bazel. Để kết xuất 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 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 nội dung 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 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

Trình đại diện java được kiểm tra vào 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í 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 hồ sơ theo dõi JSON đã thu thập trước đó trong lệnh gọi Bazel.

canonicalize-flags

Lệnh canonicalize-flags lấy danh sách các tuỳ chọn cho một lệnh Bazel và trả về danh sách các tuỳ chọn có cùng hiệu lực. Danh sách các lựa chọn mới là danh sách chuẩn. 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ể sử dụng tuỳ chọn --for_command để chọn trong số các lệnh khác nhau. Hiện tại, chúng tôi chỉ hỗ trợ buildtest. 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 quá trình khởi động máy ảo Java mà quy trình máy chủ Bazel sử dụng và áp dụng cho tất cả các lệnh tiếp theo do máy chủ đó xử lý. Nếu đã có đang chạy máy chủ Bazel và các tuỳ chọn khởi động không khớp, thì nó sẽ khởi động lại.

Tất cả tuỳ chọn được mô tả trong phần này phải được chỉ định bằng cách sử dụng tham số --key=value hoặc --key value của bạn. Ngoài ra, các tùy chọn này phải xuất hiện trước tên của Bazel . Sử dụng startup --key=value để liệt kê các thành phần này trong tệp .bazelrc.

--output_base=dir

Lựa chọn này yêu cầu một đối số đường dẫn. Đối số này phải chỉ định một thư mục có thể ghi. Bazel sẽ 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 sẽ thay đổi máy chủ để xử lý lệnh.

Theo mặc định, cơ sở đầu ra được lấy từ tên đăng nhập của người dùng và tên của thư mục không gian làm việc (thực tế là 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, 2 lệnh Bazel chạy đồng thời (do toán tử shell &amp;), mỗi toán tử sử dụng một Bazel khác nhau thực thể máy chủ (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ỏ đến thư mục gốc nơi tạo ra các cơ sở cài đặt và đầu ra. Thư mục không được tồn tại hoặc thuộc sở hữu của người dùng thực hiện lệnh 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, tuỳ chọn này sẽ ghi đè dùng --output_user_root để tính cơ sở đầu ra.

Vị trí số lượt 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 Bazel được nhúng tệp nhị phân.

Bạn có thể dùng tuỳ chọn --output_user_root để chọn một vị trí cơ sở thay thế cho tất cả đầu ra của Bazel (số lượt cài đặt và đầu ra cơ sở) nếu có vị trí tốt hơn trong bố cục hệ thống tệp.

--server_javabase=dir

Chỉ định máy ảo Java mà chính Bazel chạy. Giá trị này phải là một đườ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ể sử 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ẻ. Lưu ý rằng hiếm khi cần đặt cờ này. Bạn cũng có thể chuyển danh sách chuỗi được phân tách bằng dấu cách, mỗi đối số này sẽ được hiểu là một đối số JVM riêng, nhưng tính năng này sẽ sớm được không dùng nữa.

Điều này không ảnh hưởng đến bất kỳ JVM nào mà các quy trình con của Bazel sử dụng: ứng dụng, kiểm thử, công cụ, v.v. Để truyền các 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_binaryjava_test đều hỗ trợ. Ngoài ra, đối với các bài 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 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ế độ lô khiến Bazel không sử dụng chế độ máy khách/máy chủ chuẩn, nhưng thay vào đó chạy bazel quy trình java cho một lệnh đơn lẻ, được dùng để dễ dự đoán hơn ngữ nghĩa liên quan đến việc xử lý tín hiệu, điều khiển công việc và môi trường tính kế thừa biến và cần thiết để chạy bazel trong trình tù chroot.

Chế độ lô giữ lại ngữ nghĩa hàng đợi thích hợp trong cùng một output_base. Điều này có nghĩa là các lệnh gọi đồng thời sẽ được xử lý theo thứ tự mà không bị trùng lặp. Nếu chế độ hàng loạt Bazel chạy trên một ứng dụng có máy chủ đang chạy, thì trước tiên 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 khoảng thời gian, tính bằng giây, quá trình máy chủ Bazel sẽ đợi sau lần yêu cầu gần đây nhất của ứng dụng khách 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 một bản dựng nào gần đây trong không gian làm việc đó, thì có thể không mong muốn để tập lệnh gửi trước chỉ khởi động một máy chủ Bazel để thiết bị tiếp tục không hoạt động trong thời gian còn lại trong 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 trống quá thấp, máy chủ sẽ thoát.

--[no]block_for_lock

Nếu được bật, Bazel sẽ đợi các lệnh Bazel khác chứa khoá máy chủ để hoàn tất trước khi tiến hành. Nếu bạn tắt chính sách này, Bazel sẽ thoát nếu không thể có được khoá ngay lập tức và tiếp tục.

Nhà phát triển có thể sử dụng thông tin này trong các bước kiểm tra trước khi gửi để tránh phải chờ lâu bởi một lệnh Bazel khác trong cùng một ứng dụng khách.

--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ể tuân thủ mức độ ưu tiên tối đa là 4. Bỏ qua các giá trị âm.

--batch_cpu_scheduling

Sử dụng tính năng lập lịch CPU batch cho Bazel. Chính sách này hữu ích cho tải công việc không mang tính tương tác, nhưng không muốn giảm giá trị tốt của chúng. 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.

Tuỳ chọn khác

--[no]announce_rc

Kiểm soát xem Bazel có thông báo các tuỳ chọn khởi động và tuỳ chọn lệnh được đọc từ các tệp bazelrc khi khởi động hay không.

--color (yes|no|auto)

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 mục cấu hình bổ sung trong các tệp rc; cho command hiện tại, nó cũng lấy các tuỳ chọn từ command:name nếu có một 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. Phần mở rộng có thể tham chiếu đến định nghĩa (ví dụ: có thể mở rộng theo chuỗi).

--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 dẫn đến ít dữ liệu cuộn hơn và luồng đầu ra nhỏ gọn, dễ đọc của Bazel. Tính năng 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 các chế độ điều khiển con trỏ sẽ được bật. Nếu bạn đặt tuỳ chọn này thành no, tính năng sử dụng đ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ị.