Lệnh và tùy chọn

Báo cáo vấn đề Xem nguồn

Trang này bao gồm 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 đồng hành với danh sách các lệnh của Bazel trong Build with Bazel (Xây dựng 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 danh sách mục tiêu. Các nhãn này sử dụng cú pháp linh hoạt hơn nhãn, được ghi lại trong bài viết 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 một bản dựng. Khi bạn dùng --long trên một lệnh trợ giúp, các thông báo trợ giúp trực tuyến sẽ cung cấp thông tin tóm tắt về ý nghĩa, loại và giá trị mặc định cho mỗi tuỳ chọn.

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

Vị trí gói hàng

--package_path

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

Bazel tìm các gói bằng cách tìm kiếm đường dẫn gói. Đây là danh sách thư mục bazel được sắp xếp theo dấu hai chấm, mỗi thư mục là gốc của cây nguồn một phần.

Để chỉ định đường dẫn gói tuỳ chỉnh bằng cách sử dụng tuỳ chọn --package_path:

  % bazel build --package_path %workspace%:/some/other/root

Phần tử đường dẫn gói có thể được chỉ định ở ba định dạng:

  1. Nếu ký tự đầu tiên là /, đường dẫn sẽ là tuyệt đối.
  2. Nếu đường dẫn bắt đầu bằng %workspace%, đường dẫn sẽ được đưa tương ứng đến thư mục bazel đi kèm gần nhất. Ví dụ: nếu thư mục đang làm việc là /home/bob/clients/bob_client/bazel/foo, thì chuỗi %workspace% trong đường dẫn gói sẽ được mở rộng thành /home/bob/clients/bob_client/bazel.
  3. Mọi thứ khác đều được lấy tương ứng với thư mục đang hoạt động. Đây thường không phải là ý định của bạn và có thể hoạt động không như mong đợi nếu bạn sử dụng Bazel từ các thư mục bên dưới không gian làm việc bazel. Ví dụ: nếu bạn sử dụng phần tử đường dẫn gói ., sau đó chuyển sang cd vào thư mục /home/bob/clients/bob_client/bazel/foo, thì các gói sẽ được phân giải từ thư mục /home/bob/clients/bob_client/bazel/foo.

Nếu bạn sử dụng đường dẫn gói không mặc định, hãy chỉ định đường dẫn đó trong tệp cấu hình Blozel để 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ừ 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ụ: Xây dựng từ ứng dụng khách trống

  % mkdir -p foo/bazel
  % cd foo/bazel
  % touch WORKSPACE
  % bazel build --package_path /some/other/path //foo

--deleted_packages

Tuỳ chọn này chỉ định danh sách các gói được phân tách bằng dấu phẩy mà Bazel sẽ xem xét xoá, chứ không phải đang cố gắng tải từ bất kỳ thư mục nào trên đường dẫn gói. Bạn có thể sử dụng tính năng này để mô phỏng quá trình xoá các gói mà không cần xoá. Tuỳ chọn này có thể được truyền 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 tùy 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 tùy chọn này thành false, thì tính năng kiểm tra chế độ hiển thị sẽ giảm hạng xuống cảnh báo. Giá trị mặc định của tuỳ chọn này là true, để theo mặc định, quá trình kiểm tra chế độ hiển thị đã được thực hiện.

--output_filter=regex

Tuỳ chọn --output_filter sẽ chỉ hiển thị các cảnh báo tạo và biên dịch cho các mục tiêu khớp với biểu thức chính quy. Nếu một mục tiêu không khớp với biểu thức chính quy đã cho và quá trình thực thi thành công, thì kết quả đầu ra và lỗi tiêu chuẩn sẽ bị loại bỏ.

Dưới đây là một số giá trị điển hình cho tuỳ chọn này:

`--output_filter='^//(first/project|second/project):'` Hiện kết quả cho các gói đã chỉ định.
`--output_filter='^//((?!(first/bad_project|second/bad_project):))$$'` Không hiển thị kết quả cho các gói đã chỉ định.
`--output_filter=` Hiển thị mọi thứ.
`--output_filter=DONT_MATCH_ANYTHING` Không hiển thị gì.

Cờ công cụ

Các tùy chọn này kiểm soát việc Bazel sẽ chuyển đến những công cụ nào khác.

--copt=cc-option

Tuỳ chọn này lấy một đối 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 đối số đó được gọi để xử lý trước, biên dịch và/hoặc lắp ráp C, C++ hoặc mã tập hợp. URL sẽ không được chuyển khi liên kết.

Bạn có thể sử dụng tùy 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ã không phụ thuộc vào vị trí.

--host_copt=cc-option

Tuỳ chọn này lấy một đối 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 thực thi. Điều này tương tự như tuỳ chọn --copt nhưng chỉ áp dụng cho cấu hình thực thi.

--host_conlyopt=cc-option

Tuỳ chọn này lấy một đối 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ự như 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 lấy một đối 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ự như tuỳ chọn --cxxopt nhưng chỉ áp dụng cho cấu hình thực thi.

--host_linkopt=linker-option

Tuỳ chọn này sẽ lấy một đối số được chuyể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 thực thi. Điều này tương tự như tuỳ chọn --linkopt nhưng chỉ áp dụng cho cấu hình thực thi.

--conlyopt=cc-option

Tuỳ chọn này lấy một đối số được truyền đến trình biên dịch khi biên dịch các tệp nguồn C.

Phương thức này tương tự như --copt, nhưng chỉ áp dụng cho quá trình biên dịch C, chứ không áp dụng cho quá trình biên dịch hoặc liên kết C++. Vì vậy, bạn có thể 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 lấy một đối số sẽ được truyền đến trình biên dịch khi biên dịch các tệp nguồn C++.

Phương thức này tương tự như --copt, nhưng chỉ áp dụng cho quá trình biên dịch C++, không áp dụng cho quá trình biên dịch hoặc liên kết C. Vì vậy, bạn có thể chuyển các tuỳ chọn dành riêng cho C++ (chẳng hạn như -fpermissive hoặc -fno-implicit-templates) bằng --cxxopt.

Ví dụ:

  % bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code

--linkopt=linker-option

Tuỳ chọn này 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 chứ không áp dụng cho quá trình biên dịch. Vì vậy, bạn có thể chuyển các tuỳ chọn trình biên dịch chỉ hợp lý tại thời điểm liên kết (chẳng hạn như -lssp hoặc -Wl,--wrap,abort) bằng cách sử dụng --linkopt. Ví dụ:

  % bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code

Quy tắc xây dựng cũng có thể chỉ định tùy chọn liên kết trong thuộc tính của quy tắc. Các tùy chọn cài đặt của tùy 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 liệu Bazel có tách thông tin gỡ lỗi khỏi tất cả tệp nhị phân và thư viện dùng chung hay không bằng cách gọi trình liên kết với tuỳ chọn -Wl,--strip-debug. --strip=always có nghĩa là luôn tách thông tin gỡ lỗi. --strip=never có nghĩa là không bao giờ tách thông tin gỡ lỗi. Giá trị mặc định của --strip=sometimes có nghĩa là dải nếu --compilation_modefastbuild.

  % bazel build --strip=always //foo:bar

sẽ biên dịch mục tiêu trong khi tách thông tin gỡ lỗi khỏi tất cả các tệp nhị phân đã tạo.

Tuỳ chọn --strip của Bazel tương ứng với tuỳ chọn --strip-debug của ld: nó chỉ xoá thông tin gỡ lỗi. Nếu vì lý do nào đó bạn muốn loại bỏ tất cả ký hiệu, chứ không chỉ gỡ lỗi ký hiệu, bạn sẽ cần sử dụng tùy chọn --strip-all của ld. Bạn có thể thực hiện việc này bằng cách chuyển --linkopt=-Wl,--strip-all vào Bazel. Ngoài ra, hãy lưu ý rằng việc đặt cờ --strip của Bazel sẽ ghi đè --linkopt=-Wl,--strip-all, vì vậy, bạn chỉ nên đặt một trong hai tác vụ này.

Nếu chỉ tạo một tệp nhị phân duy nhất và muốn loại bỏ tất cả các biểu tượng, bạn cũng có thể truyền --stripopt=--strip-all và tạo rõ ràng phiên bản //foo:bar.stripped của mục tiêu. Như đã mô tả trong phần trên --stripopt, thao tác này sẽ áp dụng hành động thoát dải sau khi liên kết nhị phân cuối cùng thay vì loại bỏ trong tất cả hành động liên kết của bản dựng.

--stripopt=strip-option

Đây là một tuỳ chọn bổ sung để truyền lệnh strip khi tạo tệp nhị phân *.stripped. Giá trị mặc định là -S -p. Bạn có thể sử dụng tùy 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 phản hồi) khi tệp nhị phân C/C++ được tạo được thực thi. Đối với GCC, đối số được cung cấp sẽ được dùng làm tiền tố thư mục cho cây thư mục tệp cho 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ơ sẽ được nén và cung cấp cho tuỳ chọn --fdo_optimize=profile-zip 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(các) tệp dữ liệu cấu hình LLVM thô. Ví dụ: --fdo_instrument=/path/to/rawprof/dir/.

Không thể sử dụng đồng thời các tùy chọn --fdo_instrument--fdo_optimize.

--fdo_optimize=profile-zip

Tuỳ chọn --fdo_optimize cho phép sử dụng thông tin cấu hình tệp cho mỗi đối tượng để thực hiện các hoạt động tối ưu hoá FDO (tối ưu hoá theo hướng phản hồi) khi biên dịch. Đối với GCC, đối số được cung cấp là tệp zip chứa cây tệp được tạo trước đó gồm cá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 tiện ích .afdo xác định.

Đối với trình biên dịch LLVM, đối số được cung cấp phải trỏ đến tệp đầu ra của hồ sơ LLVM đã được lập chỉ mục do công cụ llvm-profdata chuẩn bị và phải có đuôi tệp .profdata.

Không thể sử dụng đồng thời các tùy chọn --fdo_instrument--fdo_optimize.

--java_language_version=version

Tuỳ chọn này chỉ định phiên bản 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 đặc tả Java 8. Giá trị mặc định là 11. --> Các giá trị có thể là: 8, 9, 10, 11, 14 và 15 và có thể được mở rộng bằng cách đăng ký chuỗi công cụ Java tuỳ chỉnh sử dụng default_java_toolchain.

--tool_java_language_version=version

Phiên bản ngôn ngữ Java dùng để xây dựng các công cụ được thực thi trong một 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 của JVM sẽ sử dụng để thực thi mã và chạy 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ừ kho lưu trữ từ xa và chạy ứng dụng Java bằng kho lưu trữ đó.

Giá trị mặc định là local_jdk. Giá trị có thể là: local_jdk, local_jdk_version, remotejdk_11remotejdk_17. Bạn có thể mở rộng các giá trị này bằng cách đăng ký JVM tuỳ chỉnh thông qua các quy tắc kho lưu trữ local_java_repository hoặc remote_java_repository.

--tool_java_runtime_version=version

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

--jvmopt=jvm-option

Tuỳ chọn này cho phép chuyển các đối số tuỳ chọn đến máy ảo Java. Bạn có thể sử dụng đối số 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 chủ ảo (VM) để 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 các đối số tuỳ chọn đến javac. Bạn có thể sử dụng đối số này với một đối số lớn hoặc nhiều lần với các đối số riêng lẻ. Ví dụ:

  % bazel build --javacopt="-g:source,lines" //myprojects:prog

sẽ tạo lại java_binary bằng thông tin gỡ lỗi mặc định của javac (thay vì mặc định bazel).

Tuỳ chọn này được chuyển đến javac sau các tuỳ chọn mặc định được tích hợp sẵn của Bazel cho javac và trước các tuỳ chọn theo quy tắc. Thông số cuối cùng của bất kỳ tùy chọn nào trong javac đều 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)

Tùy 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 hay không. Mục tiêu Java phải khai báo tường minh tất cả mục tiêu được sử dụng trực tiếp dưới dạng phần phụ thuộc. Cờ này hướng dẫn javac xác định các jar thực sự được dùng để kiểm tra từng loại java và cảnh báo/lỗi nếu các jar này không phải là dữ liệu đầu ra của phần phụ thuộc trực tiếp của mục tiêu hiện tại.

  • off có nghĩa là tính năng kiểm tra đã tắt.
  • warn có nghĩa là javac sẽ tạo cá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.
  • Tất cả default, stricterror đều có nghĩa là tạo lỗi thay vì cảnh báo, khiến mục tiêu hiện tại không tạo được nếu tìm thấy 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ờ chưa được chỉ định.

Ngữ nghĩa xây dựng

Các tuỳ chọn này ảnh hưởng đến lệnh tạo và/hoặc nội dung tệp đầu ra.

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

Tuỳ chọn --compilation_mode (thường được rút gọn thành -c, đặc biệt là -c opt) nhận đối số fastbuild, dbg hoặc opt và ảnh hưởng đến nhiều tuỳ chọn tạo mã C/C++, chẳng hạn như mức độ tối ưu hoá và tính hoàn chỉnh của các bảng gỡ lỗi. Bazel sử dụng một thư mục đầu ra riêng cho từng 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 tạo lại toàn bộ lần.

  • fastbuild có nghĩa là tạo nhanh nhất có thể: tạo thông tin gỡ lỗi tối thiểu (-gmlt -Wl,-S) và không tối ưu hoá. Đây là lựa chọn mặc định. Lưu ý: -DNDEBUG sẽ không được đặt.
  • dbg có nghĩa là bản dựng có bật tính năng gỡ lỗi (-g) để bạn có thể sử dụng gdb (hoặc trình gỡ lỗi khác).
  • opt có nghĩa là bản dựng đã bật tính năng tối ưu hoá và đã tắt (-O2 -DNDEBUG) các lệnh gọi assert(). Thông tin gỡ lỗi sẽ không được tạo ở chế độ opt trừ phi bạn cũng truyền --copt -g.

--cpu=cpu

Tuỳ chọn này chỉ định cấu trúc CPU mục tiêu sẽ được dùng để biên dịch tệp nhị phân trong quá trình xây 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. Các biến có thể được chỉ định theo tên, trong trường hợp đó giá trị sẽ được lấy từ môi trường gọi hoặc bằng cặp name=value đặt giá trị độc lập với môi trường lệnh gọi.

Bạn có thể chỉ định cờ --action_env này nhiều lần. Nếu một giá trị được gán cho cùng một biến trên nhiều cờ --action_env, thì thao tác chỉ định mới nhất sẽ thắng.

--experimental_action_listener=label

Tuỳ chọn experimental_action_listener hướng dẫn Bazel sử dụng thông tin chi tiết từ quy tắc action_listener do label chỉ định để chèn extra_actions vào biểu đồ bản dựng.

--[no]experimental_extra_action_top_level_only

Nếu bạn đặt tuỳ chọn này thành true (đúng), thì các thao tác bổ sung do tuỳ chọn dòng lệnh --experimental_action_listener chỉ định sẽ chỉ được lên lịch cho các mục tiêu cấp cao nhất.

--experimental_extra_action_filter=regex

Tuỳ chọn experimental_extra_action_filter hướng dẫn Bazel lọc tập hợp các mục tiêu để lên lịch extra_actions.

Cờ này chỉ áp dụng khi 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 yêu cầu đều được lên lịch thực thi. --experimental_extra_action_filter sẽ hạn chế việc lên lịch để extra_actions trong đó nhãn của chủ sở hữu khớp với biểu thức chính quy đã chỉ định.

Ví dụ sau sẽ giới hạn việc lên lịch extra_actions để chỉ áp dụng cho các hành động có nhãn '/bar/':

% bazel build --experimental_action_listener=//test:al //foo/... \
  --experimental_extra_action_filter=.*/bar/.*

--host_cpu=cpu

Tuỳ chọn này chỉ định tên của cấu trúc CPU sẽ được dùng để xây dựng các công cụ lưu trữ.

--fat_apk_cpu=cpu[,cpu]*

CPU để xây dựng thư viện C/C++ trong deps tạm thời của các quy tắc android_binary. Các quy tắc C/C++ khác không bị ảnh hưởng. Ví dụ: nếu cc_library xuất hiện trong deps bắc cầu của một quy tắc android_binary và một quy tắc cc_binary, thì cc_library sẽ được tạo ít nhất hai lần: một lần cho mỗi CPU được chỉ định bằng --fat_apk_cpu cho quy tắc android_binary và một lần cho CPU được chỉ định với --cpu cho quy tắc cc_binary.

Mặc định là armeabi-v7a.

Một tệp .so được tạo và đóng gói trong APK cho mỗi CPU được chỉ định bằng --fat_apk_cpu. Tên của tệp .so có tiền tố là tên của quy tắc android_binary với "lib". Ví dụ: nếu tên của android_binary là "foo" thì tệp sẽ là libfoo.so.

--per_file_copt=[+-]regex[,[+-]regex]...@option[,option]...

Khi 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 regex trong đó và không khớp với bất kỳ biểu thức loại trừ nào sẽ được tạo bằng các tuỳ chọn cho trước. Tính năng so khớp nhãn sử dụng dạng chính tắc của nhãn (tức là //package:label_name).

Đường dẫn thực thi là đường dẫn tương đối đến thư mục không gian làm việc của bạn, bao gồm cả tên cơ sở (bao gồm cả đuôi) của tệp C++. Chính sách này cũng áp dụng cho mọi tiền tố phụ thuộc vào nền tảng.

Để khớp với 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, regexp không được bắt đầu bằng '//' vì điều đó không khớp với bất kỳ đường dẫn thực thi nào. Bạn có thể sử dụng tên gói như sau: --per_file_copt=base/.*\.pb\.cc@-g0. Thao tác này sẽ khớp mọi tệp .pb.cc trong một thư mục có tên base.

Bạn có thể sử dụng tùy 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. Ví dụ: bạn có thể biên dịch bằng --compilation_mode=opt và biên dịch chọn lọc một số tệp đã 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á.

Cảnh báo: Nếu một số tệp được biên dịch có chọn lọc với các biểu tượng gỡ lỗi, các biểu tượng có thể bị xóa 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 bắt đầu bằng + để xác định các mẫu bao gồm và - để xác định mẫu loại trừ. option là viết tắt của một tuỳ chọn tuỳ ý được truyền đến trình biên dịch C++. Nếu một tuỳ chọn chứa ,, thì bạn phải trích dẫn nó như sau: \,. Các tuỳ chọn cũng có thể chứa @, vì chỉ có @ đầu tiên được dùng để phân tách các 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 tuỳ chọn -O0-fprofile-arcs vào dòng lệnh của trình biên dịch C++ cho tất cả các tệp .cc trong //foo/ ngoại trừ file.cc.

--dynamic_mode=mode

Xác định xem 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 liên kết trên các quy tắc xây dựng.

Chế độ:

  • auto: Chuyển sang chế độ phụ thuộc vào nền tảng; default cho linux và off cho cygwin.
  • default: Cho phép bazel chọn xem có liên kết động hay không. Hãy xem phần linkstatic để biết thêm thông tin.
  • fully: Tự động liên kết tất cả mục tiêu. Điều này sẽ tăng tốc thời gian liên kết và giảm kích thước của các tệp nhị phân thu được.
  • off: Liên kết tất cả mục tiêu ở chế độ hầu hết là tĩnh. Nếu bạn đặt -static trong linkopts, 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 để ghi thông tin gỡ lỗi C++ vào các tệp .dwo chuyên dụng thay vì tệp .o. Nếu không, tệp sẽ giảm đáng kể kích thước đầu vào đến các đường liên kết và có thể giảm thời gian liên kết.

Khi đặt thành [dbg][,opt][,fastbuild] (ví dụ: --fission=dbg,fastbuild), Fission chỉ được bật cho tập hợp các chế độ biên dịch đã chỉ định. Điều này rất hữu ích cho các chế độ cài đặt bazelrc. Khi được đặt thành yes, Fission sẽ được bật trên toàn hệ thống. Khi được đặt thành no, Fission 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, thì mọi tuỳ chọn -static trong các liên kết của quy tắc cc_* XÂY DỰNG tệp sẽ bị bỏ qua. Đây chỉ là giải pháp cho các bản dựng cứng C++.

--[no]force_pic

Nếu bạn bật chính sách này, tất cả hoạt động biên dịch C++ sẽ tạo ra mã không phụ thuộc vào vị trí ("-fPIC"), đường liên kết ưu tiên thư viện tạo sẵn PIC thay vì thư viện không phải PIC, còn đường liên kết tạo ra tệp thực thi độc lập với vị trí ("-pie"). Mặc định bị tắt.

--android_resource_shrinking

Chọn xem có 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 trên android_binary; xem tài liệu về quy tắc đó để biết thêm chi tiết. Mặc định là tắt.

--custom_malloc=malloc-library-target

Khi được chỉ định, luôn sử dụng phương thức triển khai Malloc đã cho, ghi đè tất cả các thuộc tính malloc="target", bao gồm cả trong các mục tiêu sử dụng giá trị 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ử dụng cho mọi quá trình biên dịch C++ trong một bản dựng. Bazel sẽ tìm tệp CROSSTOOL ở vị trí đó và sử dụng tệp này để tự động xác định các chế độ cài đặt cho --compiler.

--host_crosstool_top=label

Nếu không được chỉ định, Bazel sẽ sử dụng giá trị của --crosstool_top để biên dịch mã trong cấu hình thực thi, chẳng hạn như các công cụ chạy trong quá trình tạo bản dựng. Mục đích chính của cờ này là cho phép biên dịch chéo.

--apple_crosstool_top=label

Công cụ chéo để sử dụng cho việc biên dịch các quy tắc C/C++ trong deps bắc cầu của các quy tắc objc*, ios* và apple*. Đối với các mục tiêu đó, cờ này sẽ ghi đè --crosstool_top.

--android_crosstool_top=label

Công cụ chéo được sử dụng để biên dịch các quy tắc C/C++ trong deps tạm thời của các quy tắc android_binary. Điều này sẽ hữu ích nếu các mục tiêu khác trong bản dựng yêu cầu một công cụ chéo khác. Tuỳ chọn mặc định là sử dụng crosstool được quy tắc android_ndk_repository tạo trong tệp WORKSPACE. Xem thêm --fat_apk_cpu.

--compiler=version

Tuỳ chọn này chỉ định phiên bản trình biên dịch C/C++ (chẳng hạn như gcc-4.1.0) để sử dụng cho việc biên dịch tệp nhị phân trong quá trình xây dựng. Nếu muốn xây dựng bằng một công cụ chéo tuỳ chỉnh, bạn nên sử dụng tệp CROSSTOOL thay vì chỉ định cờ này.

--android_sdk=label

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

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

--java_toolchain=label

Tuỳ chọn này chỉ định nhãn của java_toolchain dùng để biên dịch tệp nguồn Java.

--host_java_toolchain=label

Nếu không được chỉ định, bazel sẽ sử dụng giá trị của --java_toolchain để biên dịch mã trong cấu hình thực thi, chẳng hạn như các công cụ chạy trong quá trình xây dựng. Mục đích chính của cờ này là cho phép biên dịch chéo.

--javabase=(label)

Tuỳ chọn này đặt nhãn của lượt cài đặt Java cơ sở để dùng cho bazel run, bazel test và cho các tệp nhị phân Java do java_binaryjava_test tạo. Các biến JAVABASEJAVA "Make" bắt nguồn từ tuỳ chọn này.

--host_javabase=label

Tuỳ chọn này đặt nhãn của lượt cài đặt Java cơ sở để sử dụng trong cấu hình thực thi, ví dụ: cho các công cụ xây dựng máy chủ bao gồm JavaBuilder và Singlejar.

Thao tác này không chọn trình biên dịch Java dùng để biên dịch tệp nguồn Java. Bạn có thể chọn trình biên dịch bằng cách cài đặt tuỳ chọn --java_toolchain.

Chiến lược thực thi

Các tuỳ chọn này ảnh hưởng đến cách Bazel thực thi bản dựng. Các tệp này sẽ không ảnh hưởng đáng kể đến các tệp đầu ra do bản dựng tạo ra. Thông thường, tốc độ xây dựng ảnh hưởng chính.

--spawn_strategy=strategy

Tuỳ chọn này kiểm soát vị trí và cách thực thi lệnh.

  • standalone khiến các lệnh được thực thi dưới dạng quy trình phụ cục bộ. Giá trị này không được dùng nữa. Thay vào đó, hãy sử dụng local.
  • sandboxed khiến các lệnh được thực thi bên trong một hộp cát trên máy cục bộ. Điều này đòi hỏi tất cả các tệp đầu vào, phần phụ thuộc dữ liệu và công cụ đều được liệt kê dưới dạng phần phụ thuộc trực tiếp trong các thuộc tính srcs, datatools. Theo mặc định, Bazel bật hộp cát cục bộ trên các hệ thống hỗ trợ thực thi trong hộp cát.
  • local khiến các lệnh được thực thi dưới dạng quy trình phụ cục bộ.
  • worker khiến các lệnh được thực thi bằng một trình thực thi ổn định, nếu có.
  • docker khiến các lệnh được thực thi bên trong một hộp cát docker trên máy cục bộ. Để thực hiện việc này, bạn phải cài đặt docker.
  • remote khiến các lệnh được thực thi từ xa; điều này chỉ có sẵn nếu bạn đã định cấu hình riêng trình thực thi từ xa.

--strategy mnemonic=strategy

Tuỳ chọn này kiểm soát vị trí và cách thực thi các lệnh, ghi đè --spawn_strategy (và --genrule_strategy bằng Regen-menemonic) trên cơ sở ghi nhớ. Hãy xem --spawn_strategy để biết các chiến lược được hỗ trợ và tác dụng của chúng.

--strategy_regexp=<filter,filter,...>=<strategy>

Tuỳ chọn này chỉ định chiến lược nào sẽ được dùng để thực thi các lệnh có phần 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ề so khớp regex_filter. Hãy xem --spawn_strategy để biết các chiến lược được hỗ trợ và tác dụng của chúng.

Hệ thống sẽ sử dụng regex_filter cuối cùng khớp với nội dung mô tả. Tuỳ chọn này sẽ ghi đè các cờ khác để chỉ định chiến lược.

  • Ví dụ: --strategy_regexp=//foo.*\\.cc,-//foo/bar=local có nghĩa là chạy các hành động bằng chiến lược local nếu mô tả tương ứng là //foo.*.cc nhưng không khớp với //foo/bar.
  • Ví dụ: --strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed chạy "Biên dịch //foo/bar/baz" bằng chiến lược sandboxed, nhưng đảo ngược thứ tự chạy local.
  • Ví dụ: --strategy_regexp='Compiling.*/bar=local,sandboxed' chạy "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à cách viết tắt không dùng nữa cho --strategy=Genrule=strategy.

--jobs=n (-j)

Tuỳ chọn này lấy đối số nguyên, chỉ định giới hạn về số lượng công việc sẽ được thực thi đồng thời trong giai đoạn thực thi của bản dựng.

--progress_report_interval=n

Bazel sẽ định kỳ in báo cáo tiến trình cho các công việc chưa hoàn thành (chẳng hạn như các thử nghiệm chạy trong thời gian dài). Tùy chọn này đặt tần suất báo cáo, tiến trình sẽ được in mỗi n giây.

Giá trị mặc định là 0, điều đó có nghĩa là một thuật toán gia tăng: báo cáo đầu tiên sẽ được in sau 10 giây, sau đó là 30 giây và sau khi tiến trình đó được báo cáo mỗi phút một lần.

Khi bazel sử dụng tính năng điều khiển con trỏ, theo quy định của --curses, tiến trình sẽ được báo cáo mỗi giây.

--local_{ram,cpu}_resources resources or resource expression

Các tuỳ chọn này chỉ định 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 cho các hoạt động xây dựng và kiểm thử để chạy cục bộ. Các biến này nhận một số nguyên hoặc từ khoá (HOST_RAM hoặc HOST_CPUS) theo sau là [-|*float] (ví dụ: --local_cpu_resources=2, --local_ram_resources=HOST_RAM*.5, --local_cpu_resources=HOST_CPUS-1). Các cờ này độc lập; một hoặc cả hai có thể được đặt. Theo mặc định, Bazel ước tính dung lượng RAM và số lõi CPU trực tiếp từ cấu hình của hệ thống cục bộ.

Tuỳ chọn này được bật theo mặc định, chỉ định xem có tạo các đường liên kết tượng trưng cho tệp chạy cho các hoạt động kiểm thử và tệp nhị phân trong thư mục đầu ra hay không. Việc sử dụng --nobuild_runfile_links có thể hữu ích cho việc xác thực nếu tất cả mục tiêu biên dịch mà không làm phát sinh chi phí xây dựng cây chạy tệp.

Khi các quy trình kiểm thử (hoặc ứng dụng) được thực thi, các phần phụ thuộc dữ liệu trong thời gian chạy sẽ được tập hợp tại một nơi. Trong cây đầu ra của Bazel, cây "runfiles" này thường được can thiệp vào hệ thống ở vai trò đồ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ác đường dẫn có dạng $TEST_SRCDIR/workspace/packagename/filename. Cây chạy tệp đả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à các tệp đó có phần phụ thuộc được khai báo và không có dữ liệu nào khác. Theo mặc định, cây chạy tệp được triển khai bằng cách tạo một tập hợp các liên kết tượng trưng đến các tệp bắt buộc. Khi tập hợp các đường liên kết phát triển, chi phí của hoạt động này cũng sẽ tăng lên. Đối với một số bản dựng lớn, tập hợp này có thể đóng góp đáng kể vào tổng thời gian xây dựng, đặc biệt là do từng lượt kiểm thử (hoặc ứng dụng) riêng đòi hỏi phải có một cây chạy riêng.

--[no]build_runfile_manifests

Tuỳ chọn này, được bật theo mặc định, sẽ chỉ định xem có nên ghi các tệp kê khai runfiles vào cây đầu ra hay không. Việc tắt chính sách này ngụ ý --nobuild_runfile_links.

Bạn có thể tắt tính năng này khi thực thi các chương trình kiểm thử từ xa, vì các tệp runfile sẽ được tạo từ xa từ các tệp kê khai trong bộ nhớ.

--[no]discard_analysis_cache

Khi bạn bật tuỳ chọn này, Bazel sẽ huỷ bộ nhớ đệm phân tích ngay trước khi quá trình thực thi bắt đầu, nhờ đó sẽ giải phóng thêm bộ nhớ (khoảng 10%) cho giai đoạn thực thi. Hạn chế là các bản dựng tăng dần hơn sẽ chậm hơn. Xem thêm chế độ tiết kiệm bộ nhớ.

--[no]keep_going (-k)

Như trong GNU Make, giai đoạn thực thi của một bản dựng sẽ dừng khi gặp lỗi đầu tiên. Đôi khi sẽ hữu ích khi cố gắng xây dựng nhiều nhất có thể ngay cả khi gặp lỗi. Tuỳ chọn này cho phép hành vi đó và khi được chỉ định, bản dựng sẽ cố gắng tạo mọi mục tiêu có đ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 được liên kết với giai đoạn thực thi của một bản dựng, nhưng cũng ảnh hưởng đến giai đoạn phân tích: nếu một số mục tiêu được chỉ định trong lệnh tạo bản dựng, nhưng chỉ có một số mục tiêu trong số đó có thể được phân tích thành công, thì bản dựng sẽ dừng lại do lỗi trừ khi --keep_going được chỉ định. Trong trường hợp đó, bản dựng sẽ chuyển sang giai đoạn thực thi, nhưng chỉ đối với 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 biên dịch các mục tiêu java_library bởi Bazel. Thay vì sử dụng đầu ra của java_library để biên dịch các mục tiêu phụ thuộc java_library, Bazel sẽ tạo các jar giao diện chỉ chứa chữ ký của các thành phần không phải là thành viên riêng tư (các phương thức và trường truy cập công khai, được bảo vệ và mặc định (gói)) và sử dụng jar giao diện để biên dịch các mục tiêu phụ thuộc. Điều này giúp bạn tránh được việc biên dịch lại khi các thay đổi chỉ được thực hiện đối với phần nội dung của phương thức hoặc các thành phần riêng tư của một lớp.

--[no]interface_shared_objects

Tuỳ chọn này bật đối tượng dùng chung giao diện. Điều này giúp tệp nhị phân và các thư viện dùng chung khác phụ thuộc vào giao diện của đối tượng dùng chung, thay vì triển khai đối tượng đó. Khi chỉ triển khai các thay đổi, Bazel có thể tránh xây dựng lại các mục tiêu phụ thuộc vào thư viện dùng chung đã thay đổi một cách không cần thiết.

Lựa chọn đầu ra

Các tuỳ chọn này xác định nội dung cần xây dựng hoặc thử nghiệm.

--[no]build

Tuỳ chọn này làm cho giai đoạn thực thi của bản dựng xảy ra; tuỳ chọn này được bật theo mặc định. Khi bạn tắt, giai đoạn thực thi sẽ bị bỏ qua và chỉ 2 giai đoạn đầu tiên tải và phân tích.

Tuỳ chọn này có thể hữu ích cho việc xác thực BUILD tệp và phát hiện lỗi trong dữ liệu đầu vào mà không cần tạo ra bất cứ nội dung gì.

--[no]build_tests_only

Nếu được chỉ định, Bazel sẽ chỉ tạo những gì cần thiết để chạy các quy tắc *_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ứ được yêu cầu, bao gồm cả quy tắc *_testtest_suite được lọc ra từ quá trình kiểm thử. Điều này sẽ hữu ích vì việc chạy bazel test --build_tests_only foo/... có thể không phát hiện được tất cả các lỗi bản dựng trong cây foo.

--[no]check_up_to_date

Tuỳ chọn này khiến Bazel không thực hiện bản dựng mà chỉ kiểm tra xem tất cả các mục tiêu đã chỉ định có cập nhật hay không. Nếu có, bản dựng sẽ hoàn tất thành công, như thường lệ. Tuy nhiên, nếu tệp bị lỗi thời, thay vì được tạo, hệ thống sẽ báo cáo lỗi và bản dựng không hoạt động. Tuỳ chọn này có thể hữu ích khi xác định xem bản dựng có được thực hiện gần đây hơn bản chỉnh sửa nguồn hay không (ví dụ: để kiểm tra trước khi gửi) mà không phải chịu chi phí xây dựng.

Xem thêm --check_tests_up_to_date.

--[no]compile_one_dependency

Biên dịch một phần phụ thuộc duy nhất của các tệp đối số. Điều này sẽ hữu ích cho việc kiểm tra cú pháp các tệp nguồn trong IDE, chẳng hạn như bằng cách tạo lại một mục tiêu phụ thuộc vào tệp nguồn để phát hiện lỗi sớm nhất có thể trong chu kỳ 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 gắn cờ: mỗi đối số phải là một nhãn mục tiêu tệp hoặc tên tệp thuần tuý liên quan đến thư mục đang làm việc và một quy tắc phụ thuộc vào từng tên tệp nguồn được tạo. Đối với các nguồn C++ và Java, các quy tắc trong cùng một không gian ngôn ngữ sẽ được ưu tiên chọn. Đối với nhiều quy tắc có cùng lựa chọn ưu tiên, hệ thống sẽ chọn quy tắc xuất hiện đầu tiên trong tệp BUILD. Mẫu mục tiêu được đặt tên rõ ràng không tham chiếu đến tệp nguồn sẽ dẫn đến lỗi.

--save_temps

Tuỳ chọn --save_temps khiến các đầu ra tạm thời từ trình biên dịch được lưu. Bao gồm các tệp .s (mã asembler), .i (C được xử lý trước) và .ii (C++ đã xử lý trước). Các kết quả này thường hữu ích khi gỡ lỗi. Nhiệt độ sẽ chỉ được tạo cho nhóm mục tiêu được chỉ định trên dòng lệnh.

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

Để đảm bảo Bazel in được vị trí của các tệp đầu ra bổ sung, hãy kiểm tra để đảm bảo chế độ cài đặt --show_result n đủ cao.

--build_tag_filters=tag[,tag]*

Nếu được chỉ định, Bazel sẽ chỉ tạo các mục tiêu có ít nhất một thẻ bắt buộc (nếu có bất kỳ thẻ nào được chỉ định) và không có bất kỳ thẻ bị loại trừ nào. Bộ lọc thẻ bản dựng được chỉ định dưới dạng danh sách các từ khoá thẻ được phân tách bằng dấu phẩy, tuỳ chọn đứng trước dấu '-' dùng để biểu thị các thẻ bị loại trừ. Các thẻ bắt buộc cũng có thể có dấu '+' trước đó.

Khi chạy kiểm thử, Bazel sẽ bỏ qua --build_tag_filters cho các mục tiêu kiểm thử. Các mục tiêu này được tạo và chạy ngay cả khi không khớp với bộ lọc này. Để tránh tạo các bản dựng này, hãy lọc các mục tiêu kiểm thử bằng --test_tag_filters hoặc 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ẽ kiểm thử (hoặc tạo nếu --build_tests_only cũng được chỉ định) chỉ kiểm thử các mục tiêu có kích thước đã cho. Bộ lọc kích thước thử nghiệm được chỉ định dưới dạng danh sách các giá trị kích thước thử nghiệm được phân tách bằng dấu phẩy (nhỏ, lớn, lớn hoặc rất lớn), theo sau là ký hiệu '-' được 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ỉ thử nghiệm các thử nghiệm vừa và nhỏ bên trong //foo.

Theo mặc định, bộ lọc kích thước thử nghiệm không được áp dụng.

--test_timeout_filters=timeout[,timeout]*

Nếu được chỉ định, Bazel sẽ kiểm thử (hoặc tạo nếu --build_tests_only cũng được chỉ định) chỉ kiểm thử các mục tiêu với thời gian chờ nhất định. Bộ lọc thời gian chờ kiểm thử được chỉ định dưới dạng danh sách các giá trị thời gian chờ kiểm thử được phân tách bằng dấu phẩy (ngắn, trung bình, dài hoặc vĩnh viễn), tuỳ chọn đứng trước dấu '-' dùng để biểu thị thời gian chờ kiểm thử bị loại trừ. Hãy xem --test_size_filters để biết ví dụ về cú pháp.

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

--test_tag_filters=tag[,tag]*

Nếu được chỉ định, Bazel sẽ kiểm thử (hoặc tạo nếu --build_tests_only cũng được chỉ định) chỉ kiểm thử 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ẻ nào bị loại trừ. Bộ lọc thẻ thử nghiệm được chỉ định dưới dạng danh sách các từ khóa thẻ được phân tách bằng dấu phẩy, tuỳ chọn đứng trước dấu '-' được 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 đó.

Ví dụ:

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

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

Theo mặc định, tính năng lọc thẻ thử nghiệm 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 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ẽ thử nghiệm (hoặc tạo bản dựng nếu cũng chỉ định --build_tests_only) mục tiêu của các lớp quy tắc được tham chiếu. Thay vào đó, để 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ẽ kiểm thử tất cả các mục tiêu trong //baz/..., ngoại trừ các thực thể foo_testbar_test.

--test_filter=filter-expression

Chỉ định bộ lọc mà trình chạy kiểm thử có thể sử dụng để chọn một tập hợp con kiểm thử để chạy. Tất cả 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ố 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.

Diễn giải cụ thể của filter-expression phụ thuộc vào khung kiểm thử chịu trách nhiệm chạy kiểm thử. Đó có thể là một hình cầu, chuỗi con hoặc regexp. --test_filter rất tiện lợi khi truyền nhiều đối số bộ lọc --test_arg, nhưng không phải tất cả khung đều hỗ trợ đối số này.

Độ chi tiết

Các tuỳ chọn này kiểm soát độ chi tiết của đầu ra Bazel, cho thiết bị đầu cuối hoặc cho các tệp nhật ký bổ sung.

--explain=logfile

Tuỳ chọn này yêu cầu đối số tên tệp có thể khiến trình kiểm tra phần phụ thuộc trong giai đoạn thực thi của bazel build giải thích cho từng bước xây dựng đang được thực thi hoặc đã được cập nhật. Nội dung giải thích được ghi vào logfile.

Nếu bạn gặp các bản dựng lại không mong muốn, tuỳ chọn này có thể giúp bạn hiểu lý do. Thêm mã này vào .bazelrc để ghi nhật ký cho tất 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 bất ngờ được thực thi. Tuỳ chọn này có thể gây ra một mức phạt nhỏ về hiệu suất, vì vậy, bạn có thể xoá tuỳ chọn này khi không còn cần đến.

--verbose_explanations

Tuỳ chọn này làm tăng độ chi tiết của nội dung giải thích được tạo khi bật tuỳ chọn -explain (giải thích).

Cụ thể là nếu tính năng giải thích chi tiết được bật và tệp đầu ra được tạo lại vì lệnh dùng để tạo tệp đã thay đổi, thì kết quả trong tệp giải thích sẽ bao gồm toàn bộ thông tin chi tiết về lệnh mới (ít nhất là đối với hầu hết các lệnh).

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

Nếu bạn không bật --explain, thì --verbose_explanations sẽ không có hiệu lực.

--profile=file

Tuỳ chọn này, lấy đối số tên tệp, sẽ khiến Bazel ghi dữ liệu phân tích vào một tệp. Sau đó, dữ liệu có thể được phân tích hoặc phân tích cú pháp bằng lệnh bazel analyze-profile. Hồ sơ bản dựng có thể hữu ích trong việc tìm hiểu vị trí lệnh build của Bazel đang dành.

--[no]show_loading_progress

Tuỳ chọn này khiến Bazel xuất thông báo tiến trình tải gói. Nếu bạn tắt tùy chọn cài đặt này, các tin nhắn sẽ không hiển thị.

--[no]show_progress

Tuỳ chọn này khiến thông báo tiến trình hiển thị; 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 cho bazel hiển thị tối đa một thông báo tiến trình mỗi n giây, trong đó n là một số thực. Giá trị mặc định cho tuỳ chọn này là 0,02, nghĩa là bazel sẽ giới hạn các thông báo tiến trình xuống còn một thông báo cho mỗi 0,02 giây.

--show_result=n

Tuỳ chọn này kiểm soát việc in thông tin kết quả ở cuối lệnh bazel build. Theo mặc định, nếu một mục tiêu xây dựng được chỉ định, Bazel sẽ in một thông báo cho biết mục tiêu đã được cập nhật thành công hay chưa. Nếu có thì 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ó một hoặc một vài mục tiêu, nhưng đối với các bản dựng lớn (chẳng hạn như toàn bộ cây dự án cấp cao nhất), thông tin này có thể gây quá tải và gây mất tập trung; tuỳ chọn này cho phép kiểm soát thông tin đó. --show_result lấy đối số nguyên, là số lượng mục tiêu tối đa cần in thông tin kết quả đầy đủ. Theo mặc định, giá trị là 1. Trên ngưỡng này, không thông tin kết quả nào hiển thị cho từng mục tiêu riêng lẻ. Do đó, 0 sẽ luôn chặn thông tin kết quả và một giá trị rất lớn khiế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 thay đổi giữa việc tạo một nhóm nhỏ mục tiêu (ví dụ: trong chu kỳ thử nghiệm biên dịch-chỉnh sửa) 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 thử nghiệm hồi quy). Trong trường hợp trước, thông tin kết quả rất hữu ích trong khi ở trường hợp sau, việc này ít hơn. Như với tất cả các tuỳ chọn, thông tin này có thể được chỉ định ngầm thông qua tệp .bazelrc.

Các tệp này được in để giúp 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 đã xây dựng. Thông báo "cập nhật" hoặc "không thành công" của từng mục tiêu có thể dễ dàng được phân tích cú pháp bằng các tập lệnh giúp tạo bản dựng.

--sandbox_debug

Tuỳ chọn này khiến Bazel in thêm thông tin gỡ lỗi khi sử dụng hộp cát để thực thi hành động. Tuỳ chọn này cũng giữ lại các thư mục hộp cát để kiểm tra những tệp hiển thị cho các hành động 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 dòng lệnh đầy đủ 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 Bourne shell, để bạn có thể dễ dàng sao chép và dán các lệnh này vào dấu nhắc lệnh shell. (Các dấu ngoặc đơn xung quanh được cung cấp để bảo vệ trình bao của bạn khỏi các lệnh gọi cdexec; hãy nhớ sao chép chúng!) Tuy nhiên, một số lệnh được triển khai nội bộ trong Bazel, chẳng hạn như tạo cây liên kết tượng trưng. Đối với những thuộc tính này, không có dòng lệnh nào để hiển thị.

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

Vui lòng xem thêm --chi_thất_chi_t Dưới 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 dòng lệnh đầy đủ đối với các lệnh không thành công. Việc này có thể vô giá khi gỡ lỗi bản dựng bị lỗi.

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

Trạng thái vùng làm việc

Sử dụng các tuỳ chọn này để "đóng dấu" tệp nhị phân do Bazel tạo: để nhúng thông tin bổ sung vào tệp nhị phân, chẳng hạn như bản sửa đổi kiểm soát nguồn hoặc thông tin khác liên quan đến không gian làm việc. Bạn có thể sử dụng cơ chế này với các quy tắc hỗ trợ thuộc tính stamp, chẳng hạn như genrule, cc_binary, v.v.

--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 điều khiển nguồn hiện tại.

Giá trị của cờ phải là đường dẫn đến chương trình gốc. Trên Linux/macOS, tệp này có thể thực thi. Trên Windows, tệp này phải là tệp nhị phân gốc, thường là ".exe", ".bat" hoặc tệp ".cmd".

Chương trình phải in 0 hoặc nhiều cặp khoá/giá trị trở lên, cho ra một mục nhập trên mỗi dòng, sau đó thoát với giá trị 0 (nếu không, bản dựng sẽ không chạy được). Tên khoá có thể là tên bất kỳ nhưng chỉ được sử dụng chữ in hoa và dấu gạch dưới. Dấu cách đầu tiên sau tên khoá sẽ tách riêng phần này khỏi giá trị. Giá trị là phần còn lại của dòng (bao gồm cả khoảng trắng bổ sung). Cả khóa và giá trị đều không được trải dài trên nhiều dòng. Khóa không được trùng lặp.

Bazel phân chia khóa thành hai nhóm: "ổn định" và "dễ bay hơi". (Tên "ổn định" và "dễ bay hơi" hơi phản cảm, vì vậy bạn không cần suy nghĩ nhiều về chúng.)

Sau đó, Bazel ghi các cặp khoá-giá trị vào 2 tệp:

  • bazel-out/stable-status.txt chứa tất cả khoá và giá trị mà tại đó tên khoá bắt đầu bằng STABLE_
  • bazel-out/volatile-status.txt chứa các khóa còn lại và giá trị của chúng

Hợp đồng là:

  • Giá trị của khóa "ổn định" sẽ hiếm khi thay đổi, nếu có thể. Nếu nội dung của bazel-out/stable-status.txt thay đổi, Bazel sẽ vô hiệu hoá các hành động phụ thuộc vào những hành động đó. Nói cách khác, nếu giá trị của khoá ổn định thay đổi, Bazel sẽ chạy lại thao tác đã đóng dấu. Do đó, trạng thái ổn định không nên chứa những nội dung như dấu thời gian vì các nội dung này thay đổi mọi lúc và sẽ khiến Bazel chạy lại các thao tác đã đóng dấu đối với mỗi bản dựng.

    Bazel luôn cho ra các khoá ổn định sau:

    • BUILD_EMBED_LABEL: giá trị của --embed_label
    • BUILD_HOST: tên máy chủ lưu trữ mà Bazel đang chạy
    • BUILD_USER: tên người dùng mà Bazel đang chạy
  • Giá trị của khóa "volatile" có thể thay đổi thường xuyên. Bazel mong muốn họ luôn thay đổi, giống như dấu thời gian và cập nhật hợp lệ tệp bazel-out/volatile-status.txt. Tuy nhiên, để tránh chạy lại các thao tác đã đóng dấu, Bazel giả vờ rằng tệp volatile không bao giờ thay đổi. Nói cách khác, nếu tệp trạng thái dễ bay hơi là tệp duy nhất có nội dung đã thay đổi, Bazel sẽ không vô hiệu hoá các thao tác phụ thuộc vào tệp đó. Nếu các dữ liệu đầu vào khác của hành động đã thay đổi, thì Bazel sẽ chạy lại hành động đó và hành động đó sẽ thấy trạng thái biến động mới, nhưng trạng thái biến động chỉ làm thay đổi hành động.

    Bazel luôn tạo ra các khoá dễ bay hơi sau đây:

    • BUILD_TIMESTAMP: thời gian xây dựng tính bằng giây kể từ Kỷ nguyên 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ụ: ngày 2 tháng 6 năm 2023 01/04/2016) 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 làm gì cả, thoát (thành công bằng 0) và không in kết quả. Trên Windows, bạn có thể chuyển đường dẫn của true.exe của MSYS để có cùng hiệu ứng.

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

--[no]stamp

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

Bạn có thể bật hoặc tắt tính năng đóng dấu một cách rõ ràng theo từng quy tắc bằng thuộc tính stamp. Vui lòng tham khảo Bách khoa toàn thư xây dựng để biết thêm chi tiết. Khi một quy tắc đặt stamp = -1 (giá trị mặc định của các quy tắc *_binary), tùy chọn này sẽ xác định liệu bạn đã bật tính năng đóng dấu hay chưa.

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), tính năng dập sẽ bị tắt bất kể --[no]stamp. Việc chỉ định --stamp sẽ không buộc các mục tiêu được tạo lại nếu phần phụ thuộc của các mục tiêu đó không thay đổi.

Nhìn chung, bạn nên thiết lập --nostamp để đạt hiệu suất bản dựng, vì điều này giúp giảm biến động đầu vào và tối đa hoá việc lưu vào bộ nhớ đệm bản dựng.

Nền tảng

Sử dụng các tuỳ chọn này để kiểm soát các nền tảng máy chủ và nền tảng mục tiêu định cấu hình cách hoạt động của các bản dựng, đồng thời kiểm soát những nền tảng thực thi và chuỗi công cụ có sẵn cho 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 thao tác. Nền tảng có thể được chỉ định theo mục tiêu chính xác hoặc là một mẫu mục tiêu. Các nền tảng này sẽ được xem xét trước những công cụ được khai báo trong tệp WORKSPACE bằng register_execution_platforms(). Tùy chọn này chấp nhận danh sách các nền tảng được phân tách bằng dấu phẩy theo thứ tự ưu tiên. Nếu cờ được truyền nhiều lần, ghi đè gần đây nhất.

--extra_toolchains=labels

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 là một mẫu mục tiêu. Các chuỗi công cụ này sẽ được xem xét trước những chuỗi được khai báo trong tệp WORKSPACE bởi 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 regex bằng dấu phẩy. Bạn có thể phủ định biểu thức chính quy bằng cách sử dụng - ở đầu. Điều này có thể giúp nhà phát triển các quy tắc Bazel hoặc Starlark khắc phục lỗi do thiếu chuỗi công cụ.

Khác

--flag_alias=alias_name=target_path

Cờ tiện lợi dùng để liên kết các chế độ cài đặt bản dựng Starlark dài hơn với tên ngắn hơn. Để biết thêm thông tin chi tiết, vui lòng xem nội dung Cấu hình Starlark.

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

Nếu không thể tạo các đường liên kết tượng trưng vì bất kỳ lý do nào, hệ thống sẽ đưa ra cảnh báo nhưng việc tạo bản dựng vẫn được coi là thành công. Cụ thể, việc này cho phép bạn tạo một thư mục chỉ có thể đọc hoặc một thư mục mà bạn không có quyền ghi vào đó. Mọi đường dẫn được in trong thông báo cung cấp thông tin ở cuối bản dựng sẽ chỉ sử dụng dạng ngắn liên quan đến đường liên kết tượng trưng nếu các đường 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 tính chính xác của các đường dẫn đó, ngay cả khi bạn không thể dựa vào các đường 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 được bất kỳ đường liên kết tượng trưng nào, bao gồm cả đường liên kết tượng trưng bazel-outbazel-<workspace>. Sử dụng tuỳ chọn này để hoàn toàn ngăn chặn việc tạo đường liên kết tượng trưng.

  • Giảm tình trạng 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 thư mục ẩn .bazel.

--platform_suffix=string

Thêm hậu tố vào tên ngắn của cấu hình, dùng để xác định thư mục đầu ra. Việc đặt tùy chọn này thành các giá trị khác nhau sẽ đặt các tệp vào các thư mục khác nhau, chẳng hạn như để cải thiện tỷ lệ truy cập bộ nhớ đệm cho các bản dựng mà nếu không sẽ làm rối lẫn nhau các tệp đầu ra hoặc giữ các tệp đầu ra xung quanh để so sánh.

--default_visibility=(private|public)

Cờ tạm thời để kiểm tra các thay đổi về chế độ hiển thị mặc định của trình duyệt. Không dành cho mục đích sử dụng chung mà được ghi lại vì mục đích cung cấp đầy đủ thông tin.

--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 chuỗi Starlark và ghi cấu hình, ở định dạng pprof, vào tệp được đặt tên.

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

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

Để xem nhiều thành phần hiển thị 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ác kỹ sư phần mềm sử dụng trong suốt chu kỳ phát triển và bởi các kỹ sư phát hành khi chuẩn bị tệp nhị phân để triển khai cho quá trình sản xuất. Phần này cung cấp danh sách các mẹo dành cho kỹ sư phát hành sử dụng Bazel.

Các tùy chọn quan trọng

Khi sử dụng Bazel cho các bản dựng phát hành, các vấn đề tương tự cũng xảy ra 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:

Các tùy chọn sau cũng quan trọng:

  • --package_path
  • --symlink_prefix: để quản lý các bản dựng cho nhiều cấu hình, bạn có thể phân biệt từng bản dựng bằng một giá trị nhận dạng riêng biệt, chẳng hạn như "64 bit" so với "32 bit". Tuỳ chọn này sẽ phân biệt các đường liên kết tượng trưng bazel-bin (v.v.).

Chạy thử nghiệm

Để tạo và chạy kiểm thử bằng Bazel, hãy nhập bazel test theo sau là tên của mục tiêu kiểm thử.

Theo mặc định, lệnh này thực hiện hoạt động xây dựng và kiểm thử đồng thời, xây dựng tất cả mục tiêu được chỉ định (bao gồm mọi mục tiêu không 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 điều kiện tiên quyết được xây dựng, nghĩa là việc kiểm thử được xen kẽ với bản dựng. Làm như vậy thường giúp tăng tốc độ đáng kể.

Tuỳ chọn cho bazel test

--cache_test_results=(yes|no|auto) (-t)

Nếu tùy chọn này được đặt thành 'auto' (mặc định) thì Bazel sẽ chỉ chạy lại chương trình kiểm thử nếu áp dụng 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 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 thử nghiệm với --runs_per_test
  • kiểm tra không thành công.

Nếu giá trị là 'no', thì tất cả các lượt kiểm thử sẽ được thực thi vô điều kiện.

Nếu chọn "có", hoạt động lưu vào bộ nhớ đệm sẽ giống với tự động, ngoại trừ việc có thể lưu các lần kiểm thử thất bại vào bộ nhớ đệm và chạy thử nghiệm với --runs_per_test.

Người dùng đã bật tuỳ chọn này theo mặc định trong tệp .bazelrc có thể thấy các phím tắt -t (bật) hoặc -t- (tắt) thuận tiện cho việc ghi đè giá trị mặc định trong một lần chạy cụ thể.

--check_tests_up_to_date

Tuỳ chọn này yêu cầu Bazel không chạy các lượt kiểm thử mà chỉ kiểm tra và báo cáo kết quả kiểm thử đã lưu vào bộ nhớ đệm. Nếu có bất kỳ chương trình kiểm thử nào chưa được tạo và chạy trước đó hoặc có kết quả kiểm thử đã lỗi thời (ví dụ: do mã nguồn hoặc các tuỳ chọn bản dựng đã thay đổi), thì Bazel sẽ báo cáo một thông báo lỗi ("kết quả kiểm thử không được cập nhật"), và sẽ ghi lại trạng thái kiểm thử là "KHÔNG CÓ TRẠNG THÁI" (có màu đỏ, nếu chế độ đầu ra màu được bật) và sẽ trả về mã thoát khác 0.

Tuỳ chọn này cũng ngụ ý hành vi [--check_up_to_date](#check-up-to-date).

Tùy chọn này có thể hữu ích cho việc kiểm tra trước khi gửi.

--test_verbose_timeout_warnings

Tuỳ chọn này yêu cầu Bazel cảnh báo rõ ràng cho người dùng nếu thời gian chờ của hoạt động kiểm thử dài hơn đáng kể so với thời gian thực thi thực tế. Mặc dù thời gian chờ của một hoạt động kiểm thử phải được thiết lập sao cho không bị gián đoạn, nhưng hoạt động kiểm thử có thời gian chờ quá mức có thể ẩn những vấn đề thực sự bất ngờ xảy ra bất ngờ.

Ví dụ: một kiểm thử thường thực thi trong một hoặc hai phút sẽ không có thời gian chờ là ETERNAL hoặc LONG vì các hàm này quá nhiều và quá hào phóng.

Tuỳ chọn này rất 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 giá trị thời gian chờ hiện có.

--[no]test_keep_going

Theo mặc định, tất cả các kiểm thử đều được chạy đến khi hoàn tất. Tuy nhiên, nếu cờ này bị vô hiệu hoá, bản dựng sẽ bị huỷ trong mọi lần kiểm thử không đạt. Các bước xây dựng tiếp theo và lệnh gọi thử nghiệm sẽ không chạy và lệnh gọi chuyến bay sẽ bị huỷ. Không chỉ định cả --notest_keep_going--keep_going.

--flaky_test_attempts=attempts

Tuỳ chọn này chỉ định số lần tối đa một lần kiểm thử nếu không thành công vì bất kỳ lý do nào. Một kiểm thử ban đầu không thành công nhưng cuối cùng thành công được báo cáo dưới dạng FLAKY trên phần tóm tắt kiểm thử. Tuy nhiên, mã này được coi là đã vượt qua khi xác định mã thoát Bazel hoặc tổng số lần kiểm thử đã vượt qua. Các lần kiểm thử không đạt được tất cả những lần cho phép đều được coi là không thành công.

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

--runs_per_test=[regex@]number

Tuỳ chọn này chỉ định số lần mỗi lần kiểm thử phải được thực thi. Tất cả quá trình 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ẽ được áp dụng độc lập cho từng kiểm thử).

Trạng thái của một mục tiêu có số 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ó lỗi nào, thì bất kỳ lần chạy không thành công nào cũng sẽ khiến toàn bộ 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 đoạn 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 kết quả không thành công).

Nếu bạn chỉ định một số, thì tất cả các lượt kiểm thử sẽ chạy nhiều lần. Ngoài ra, biểu thức chính quy có thể được chỉ định bằng cú pháp regex@number. Điều này hạn chế ảnh hưởng của --runs_per_test đến các mục tiêu khớp với regex (--runs_per_test=^//pizza:.*@4 chạy tất cả các kiểm thử trong //pizza/ 4 lần). Biểu mẫu này của --runs_per_test có thể được chỉ định nhiều lần.

--[no]runs_per_test_detects_flakes

Nếu bạn chỉ định tuỳ chọn này (theo mặc định thì không), Bazel sẽ phát hiện các mảnh kiểm thử không ổn định qua --runs_per_test. Nếu một hoặc nhiều lần chạy cho một phân đoạn 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, mục tiêu sẽ được coi là không ổn định với cờ. Nếu không xác định thì 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ả thử nghiệm.

  • short in kết quả của mỗi 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 đạt. Đây là giá trị mặc định.
  • terse như short, nhưng thậm chí ngắn hơn: chỉ in thông tin về các kiểm thử không đạt.
  • detailed in từng trường hợp kiểm thử riêng lẻ không thành công, chứ không chỉ mỗi kiểm thử. Tên của các tệp đầu ra thử nghiệm sẽ bị bỏ qua.
  • none không in bản tóm tắt thử nghiệm.

--test_output=output_style

Chỉ định cách hiển thị đầu ra thử nghiệm:

  • summary cho thấy thông tin tóm tắt về việc mỗi lần kiểm thử có đạt hay không. Đồng thời hiển thị tên tệp nhật ký đầu ra cho các lần kiểm thử không thành công. Bản tóm tắt sẽ được in ở cuối bản dựng (trong quá trình xây dựng, người ta sẽ chỉ thấy các thông báo tiến trình đơn giản khi quá trình kiểm thử bắt đầu, vượt qua hoặc không thành công). Đây là hành vi mặc định.
  • errors chỉ gửi đầu ra stdout/stderr từ các kiểm thử không thành công ngay đến stdout ngay sau khi kiểm thử xong, đảm bảo đầu ra kiểm thử từ các kiểm thử đồng thời không xen kẽ với nhau. In bản tóm tắt tại bản dựng theo kết quả tóm tắt ở trên.
  • all tương tự như errors nhưng xuất ra kết quả cho tất cả các lần kiểm thử, bao gồm cả những lần kiểm thử đạt.
  • streamed phát đầ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 quy trình kiểm thử java chờ kết nối từ một trình gỡ lỗi tuân thủ JDWP trước khi bắt đầu kiểm thử. Tùy chọn này ngụ ý --test_output=streamed.

--[no]verbose_test_summary

Tuỳ chọn này được bật theo mặc định, khiến thời gian thử nghiệm và các thông tin bổ sung khác (chẳng hạn như các lần thử) được in ra cho bản tóm tắt thử nghiệm. Nếu bạn chỉ định --noverbose_test_summary, thì bản tóm tắt kiểm thử sẽ chỉ bao gồm tên kiểm thử, trạng thái kiểm thử và chỉ báo kiểm thử được lưu vào bộ nhớ đệm, cũng như được định dạng để không vượt quá 80 ký tự khi có thể.

--test_tmpdir=path

Chỉ định thư mục tạm thời cho các kiểm thử được thực thi cục bộ. Mỗi lượt kiểm thử sẽ được thực thi trong một thư mục con riêng bên trong thư mục này. Thư mục này sẽ được dọn sạch ở đầu mỗi lệnh bazel test. Theo mặc định, bazel sẽ đặt thư mục này trong thư mục cơ sở đầu ra Bazel.

--test_timeout=seconds HOẶC --test_timeout=seconds,seconds,seconds,seconds

Ghi đè giá trị thời gian chờ cho tất cả các thử nghiệm bằng cách sử dụng số giây được chỉ định làm giá trị thời gian chờ mới. Nếu chỉ cung cấp một giá trị, thì giá trị đó sẽ được sử dụng cho tất cả danh mục thời gian chờ kiểm thử.

Ngoài ra, bạn có thể cung cấp 4 giá trị phân tách bằng dấu phẩy để chỉ định thời gian chờ riêng lẻ cho các lần kiểm thử ngắn, trung bình, dài và vĩnh viễn (theo thứ tự đó). Ở cả hai dạng này, giá trị 0 hoặc giá trị âm cho mọi kích thước kiểm thử sẽ được thay thế bằng thời gian chờ mặc định cho các danh mục thời gian chờ cụ thể như được xác định bằng trang Viết thử nghiệm. Theo mặc định, Bazel sẽ sử dụng các thời gian chờ này cho tất cả các hoạt động kiểm thử bằng cách suy ra giới hạn thời gian chờ từ kích thước của hoạt động kiểm thử, bất kể kích thước được đặt ngầm hay rõ ràng.

Các thử nghiệm tuyên bố rõ ràng danh mục thời gian chờ của họ 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 bằng thẻ kích thước. Vì vậy, kiểm thử có kích thước "nhỏ" khai báo thời gian chờ "dài" sẽ có thời gian chờ hiệu dụng tương tự như thời gian chờ "lớn" mà không có thời gian chờ rõ ràng.

--test_arg=arg

Chuyển các tuỳ chọn dòng lệnh/cờ/đối số cho mỗi quy trình kiểm thử. Bạn có thể sử dụng tuỳ chọn này nhiều lần để chuyển nhiều đối số. Ví dụ: --test_arg=--logtostderr --test_arg=--v=3.

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

Chỉ định các biến bổ sung phải được chèn vào môi trường kiểm thử cho mỗi kiểm thử. Nếu bạn không chỉ định value, giá trị này sẽ được kế thừa từ môi trường shell dùng để bắt đầu lệnh bazel test.

Bạn có thể truy cập vào môi trường từ bên trong 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. command-prefix được chia thành các từ bằng cách sử dụng quy tắc mã thông báo Bourne shell, sau đó danh sách từ sẽ được thêm vào trước lệnh sẽ được thực thi.

Nếu từ đầu tiên là nhãn đủ điều kiện (bắt đầu bằng //) thì từ đó được tạo. Sau đó, nhãn sẽ được thay thế bằng vị trí thực thi tương ứng được thêm vào trước lệnh sẽ được thực thi cùng với các từ khác.

Một số lưu ý được áp dụng:

  • PATH 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 sử dụng đường dẫn tuyệt đối cho lệnh --run_under (từ đầu tiên trong command-prefix).
  • stdin chưa được kết nối nên 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'

Kiểm tra lựa chọn

Như đã nêu trong phần Tuỳ chọn lựa chọn đầu ra, bạn có thể lọc các bài kiểm thử theo kích thước, thời gian chờ, thẻ hoặc ngôn ngữ. Bộ lọc tên chung tiện lợi có thể chuyển tiếp đối số bộ lọc cụ thể đến trình chạy kiểm thử.

Các tùy 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.

Đang chạy tệp thực thi

Lệnh bazel run tương tự như bazel build, ngoại trừ việc lệnh này được dùng để tạo và chạy một mục tiêu duy nhất. Dưới đây là một phiên điển hình:

  % bazel run java/myapp:myapp -- --arg1 --arg2
  Welcome to Bazel
  INFO: Loading package: java/myapp
  INFO: Loading package: foo/bar
  INFO: Loading complete.  Analyzing...
  INFO: Found 1 target...
  ...
  Target //java/myapp:myapp up-to-date:
    bazel-bin/java/myapp:myapp
  INFO: Elapsed time: 0.638s, Critical Path: 0.34s

  INFO: Running command line: bazel-bin/java/myapp:myapp --arg1 --arg2
  Hello there
  $EXEC_ROOT/java/myapp/myapp
  --arg1
  --arg2

bazel run tương tự, nhưng không giống nhau, để 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à một thử nghiệm hay không.

Khi tệp nhị phân này không phải là một bài kiểm thử, thư mục hoạt động hiện tại sẽ là cây chạy của tệp nhị phân.

Khi tệp nhị phân là một bài kiểm thử, thư mục đang làm việc hiện tại sẽ là gốc exec và nỗ lực nhân rộng để lặp lại các bài kiểm thử môi trường thường được chạy vào. Tuy nhiên, quy trình mô phỏng không hoàn hảo và bạn không thể chạy các bài kiểm thử có nhiều phân đoạn (tuỳ chọn dòng lệnh --test_sharding_strategy=disabled có thể được dùng để giải quyết vấn đề này)

Các biến môi trường bổ sung sau đây cũng có sẵn cho tệp nhị phân:

  • BUILD_WORKSPACE_DIRECTORY: gốc của không gian làm việc nơi chạy bản dựng.
  • BUILD_WORKING_DIRECTORY: thư mục làm việc hiện tại, nơi chạy Brazel.

Ví dụ: Bạn có thể sử dụng các tệp này để diễn giải tên tệp trên dòng lệnh theo cách thân thiện với người dùng.

Tuỳ chọn cho bazel run

--run_under=command-prefix

Cách này có tác dụng tương tự như tuỳ chọn --run_under dành cho bazel test (xem ở trên), ngoại trừ việc nó áp dụng cho lệnh do bazel run chạy thay vì các kiểm thử do bazel test chạy và không thể chạy trong nhãn.

Lọc kết quả ghi nhật ký từ Bazel

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

Làm sạch dữ liệu đầu ra của bản dựng

Lệnh clean

Bazel có một 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 của 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 đang hoạt động được tạo bằng thực thể Bazel này, đồng thời đặt lại bộ nhớ đệm nội bộ. Nếu thực thi mà không có bất kỳ tuỳ chọn dòng lệnh nào, thì thư mục đầu ra cho tất cả cấu hình sẽ bị xoá.

Hãy nhớ rằng mỗi thực thể Bazel đều được liên kết với một không gian làm việc duy nhất, do đó, lệnh clean sẽ xoá tất cả đầu ra khỏi tất cả bản dựng 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 đang hoạt động do một thực thể Bazel tạo, bạn có thể chỉ định tuỳ chọn --expunge. Khi được thực thi bằng --expunge, lệnh Clean chỉ cần xoá toàn bộ cây cơ sở đầu ra, ngoài đầu ra của bản dựng, còn chứa tất cả các tệp tạm thời do Bazel tạo. Thao tác này cũng dừng máy chủ Bazel sau khi dọn dẹp, tương đương với lệnh shutdown. Ví dụ: để dọn dẹp tất cả dấu vết ổ đĩa và bộ nhớ của thực thể Bazel, bạn có thể chỉ định:

  % bazel clean --expunge

Ngoài ra, bạn có thể dọn dẹp trong nền bằng cách sử dụng --expunge_async. Việc gọi một lệnh Bazel trong cùng một ứng dụng là an toàn trong khi quá trình dọn dẹp không đồng bộ tiếp tục chạy.

Lệnh clean chủ yếu được cung cấp như một phương tiện để xác nhận lại dung lượng ổ đĩa cho các không gian làm việc không còn cần thiết nữa. Các bản dựng lại gia tăng của Bazel có thể không hoàn hảo, vì vậy, bạn có thể sử dụng clean để khôi phục trạng thái nhất quán khi có vấn đề.

Thiết kế của Bazel giúp các vấn đề này có thể khắc phục được và ưu tiên sửa lỗi này. Nếu bạn thấy một bản dựng tăng dần không chính xác, hãy gửi báo cáo lỗi và báo cáo lỗi trong các công cụ thay vì sử dụng clean.

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

Bazel đưa ra 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 xây dựng. Ngôn ngữ truy vấn được sử dụng bởi hai lệnh: truy vấn và truy vấn. Sự khác biệt chính giữa 2 lệnh là truy vấn sẽ chạy sau giai đoạn tải và truy vấn chạy sau giai đoạn phân tích. Các công cụ này là sự trợ giúp vô giá cho nhiều tác vụ kỹ thuật phần mềm.

Ngôn ngữ truy vấn dựa trên ý tưởng về các phép toán đại số trên đồ thị; ngôn ngữ truy vấn được ghi lại chi tiết trong

Tài liệu tham khảo về Blozel. Vui lòng tham khảo tài liệu đó để tham khảo, ví dụ và các tùy 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ố tùy chọn dòng lệnh. --output chọn định dạng đầu ra. --[no]keep_going (bị tắt theo mặc định) khiến công cụ truy vấn tiếp tục xử lý các lỗi; hành vi này có thể bị vô hiệu hoá nếu không thể chấp nhận kết quả chưa hoàn chỉnh trong trường hợp có lỗi.

Tuỳ chọn --[no]tool_deps (được bật theo mặc định) sẽ khiến các phần phụ thuộc trong cấu hình không phải mục tiêu được đưa vào biểu đồ phần phụ thuộc mà truy vấn hoạt động.

Tuỳ chọn --[no]implicit_deps (được bật theo mặc định) sẽ khiến các phần phụ thuộc ngầm được đưa vào biểu đồ phần phụ thuộc mà truy vấn hoạt động. Phần phụ thuộc ngầm ẩn là một phần phụ thuộc không được chỉ định rõ ràng trong tệp BUILD nhưng được thêm bằng bazel.

Ví dụ: "Cho thấy vị trí của các định nghĩa (trong tệp BUILD) của mọi quy tắc chung cần thiết để xây dựng mọi thử nghiệm 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. Nó hoạt động trên biểu đồ mục tiêu được định cấu hình sau khi phân tích và hiển thị thông tin về các hành động, cấu phần phần mềm và mối quan hệ giữa 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à dễ đọc, hãy sử dụng proto hoặc textproto để định dạng mà máy có thể đọc được. Đáng chú ý, lệnh truy vấn chạy trên một bản dựng Bazel thông thường và kế thừa tập hợp các tuỳ chọn có sẵn trong một bản dựng.

Thư viện này hỗ trợ cùng một nhóm hàm cũng có sẵn cho query truyền thống nhưng có siblings, buildfilestests.

Để biết thêm chi tiết, hãy xem Truy vấn biểu đồ hành động.

Các lệnh và tuỳ chọn khác

help

Lệnh help cung cấp trợ giúp trực tuyến. Theo mặc định, tuỳ chọn này sẽ hiện một bản tóm tắt về các lệnh có sẵn và chủ đề trợ giúp, như trình bày trong phần Xây dựng bằng Bazel. Việc chỉ định đối số sẽ giúp hiển thị thông tin trợ giúp chi tiết cho một chủ đề cụ thể. Hầu hết các chủ đề là lệnh Bazel, chẳng hạn như build hoặc query, nhưng có một số chủ đề trợ giúp bổ sung không tương ứng với lệnh.

--[no]long (-l)

Theo mặc định, bazel help [topic] chỉ in bản tóm tắt các tuỳ chọn liên quan đến một chủ đề. Nếu bạn chỉ định tùy chọn --long, thì loại, giá trị mặc định và mô tả đầy đủ của từng tùy chọn cũng sẽ được in.

shutdown

Bạn có thể dừng các quy trình máy chủ Bazel bằng cách sử dụng lệnh shutdown. Lệnh này khiến máy chủ Bazel thoát ngay khi máy chủ ở trạng thái rảnh (ví dụ: sau khi hoàn tất một bản dựng hoặc các lệnh khác hiện đang diễn ra). Để biết thêm thông tin chi tiết, vui lòng xem phần Triển khai ứng dụng/máy chủ.

Máy chủ Bazel tự dừng sau khi hết thời gian chờ, vì vậy, lệnh này hiếm khi cần thiết. Tuy nhiên, lệnh này có thể hữu ích trong các tập lệnh khi biết rằng sẽ không có thêm bản dựng nào xảy ra trong 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ố nguyên (tính bằng MB). Nếu được chỉ định, việc này sẽ tắt điều kiện đối với dung lượng bộ nhớ đã dùng. Điều này rất hữu ích đối với các tập lệnh khởi tạo nhiều bản dựng, vì bất kỳ sự cố rò rỉ bộ nhớ nào trong máy chủ Bazel đều có thể gây ra sự cố xảy ra khi xảy ra; thực hiện khởi động lại có điều kiện sẽ giành được điều kiện này.

info

Lệnh info in nhiều giá trị liên kết với thực thể máy chủ Bazel hoặc 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 đối số duy nhất (không bắt buộc), là tên của một trong các khoá trong danh sách bên dưới. Trong trường hợp này, bazel info key sẽ chỉ in giá trị của một khoá đó. (Điều này đặc biệt thuận tiện khi viết tập lệnh Bazel, vì nó giúp tránh sự cố thu được kết quả thông qua sed -ne /key:/s/key://p:

Dữ liệu độc lập với cấu hình

  • release: nhãn phát hành cho phiên bản Bazel này, hoặc "phiên bản phát triển" nếu đây không phải là tệp nhị phân được phát hành.
  • workspace đường dẫn tuyệt đối đến thư mục không gian làm việc cơ sở.
  • install_base: đường dẫn tuyệt đối đến thư mục cài đặt mà bản sao Bazel này sử dụng cho người dùng hiện tại. Bazel sẽ 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 thư mục đầu ra cơ sở mà thực thể Bazel này sử dụng cho tổ hợp không gian làm việc và người dùng hiện tại. Bazel đưa tất cả các phần tử đầu tiên và tạo đầu ra bên dưới thư mục này.

  • execution_root: đường dẫn tuyệt đối đến thư mục gốc thực thi trong output_base. Thư mục này là thư mục gốc của tất cả các tệp có thể truy cập vào các lệnh được thực thi trong quá trình tạo và là thư mục hoạt động cho các lệnh đó. Nếu thư mục không gian làm việc có thể ghi, một đường liên kết tượng trưng có tên bazel-<workspace> sẽ được đặt tại đó trỏ đến thư mục này.

  • output_path: đường dẫn tuyệt đối đến thư mục đầu ra bên dưới thư mục thực thi được dùng cho tất cả các tệp thực tế được tạo do lệnh tạo. Nếu thư mục không gian làm việc có thể ghi, 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ã quy trình của quy trình máy chủ Bazel.

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

  • command_log: đường dẫn tuyệt đối đến tệp nhật ký lệnh; chứa đường dẫn stdout và stderr xen kẽ của lệnh Bizel 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 trở thành lệnh Bazel mới 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 các tuỳ chọn --output_base hoặc --output_user_root.

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

  • gc-count, gc-time: Số lượng bộ sưu tập rác tích luỹ kể từ khi máy chủ Bazel này khởi động và thời gian cần thiết để thực hiện việc này. 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 sẽ được tìm kiếm theo gói bằng bazel. Có cùng định dạng với đối số dòng lệnh bản dựng --package_path.

Ví dụ: ID tiến trình của máy chủ Bazel.

% bazel info server_pid
1285

Dữ liệu theo cấu hình cụ thể

Các dữ liệu này có thể bị ảnh hưởng bởi các tuỳ chọn cấu hình được chuyển cho bazel info, 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 tích phần phụ thuộc, vì một số tuỳ chọn này xác định vị trí của thư mục đầu ra của một bản dựng, lựa chọn trình biên dịch, v.v.

  • bazel-bin, bazel-testlogs, bazel-genfiles: báo cáo đường dẫn tuyệt đối đến các thư mục bazel-* chứa các chương trình do bản dựng tạo ra. Tuy vậy, việc này thường không giống với 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 khi tạo bản dựng thành công. Tuy nhiên, nếu thư mục không gian làm việc ở chế độ chỉ đọc, thì bạn không thể tạo đường liên kết tượng trưng bazel-*. Các tập lệnh sử dụng giá trị do bazel info báo cáo, thay vì giả sử sự tồn tại của liên kết tượng trưng, sẽ mạnh mẽ hơn.
  • Môi trường"Make" hoàn chỉnh. Nếu cờ --show_make_env được chỉ định, tất cả các biến trong môi trường "Make" của cấu hình hiện tại cũng sẽ xuất hiện (chẳng hạn như CC, GLIBC_VERSION, v.v.). Đây là các biến được truy cập bằng cú pháp $(CC) hoặ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 cần có cờ --show_make_env.

  % bazel info --show_make_env -c opt COMPILATION_MODE
  opt

Ví dụ: thư mục đầu ra bazel-bin cho cấu hình hiện tại. Điều này được đảm bảo là chính xác ngay cả trong trường hợp không thể tạo đường liên kết tượng trưng bazel-bin vì một số lý do (chẳng hạn như nếu bạn đang tạo từ một thư mục chỉ có thể đọc).

% bazel info --cpu=piii bazel-bin
/var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/piii-opt/bin
% bazel info --cpu=k8 bazel-bin
/var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/k8-opt/bin

version--version

Lệnh phiên bản in thông tin chi tiết về phiên bản của tệp nhị phân Bazel đã tạo, bao gồm cả danh sách thay đổi mà tại đó tệp được tạo và ngày tạo. Các chỉ số này đặc biệt hữu ích trong việc xác định xem bạn đã cài được Blozel mới nhất hay đang báo cáo lỗi. Một số giá trị thú vị là:

  • changelist: danh sách thay đổi mà phiên bản Bloaz này đã được phát hành.
  • label: nhãn phát hành cho phiên bản Bazel này, hoặc "phiên bản phát triển" nếu đây không phải là tệp nhị phân được phát hành. Rất hữu ích khi báo cáo lỗi.

bazel --version, không có đối số nào khác, sẽ phát đầu ra tương tự như bazel version --gnu_format, ngoại trừ trường hợp không có tác dụng phụ của việc khởi động một máy chủ Bazel hoặc giải nén tệp lưu trữ của máy chủ. bazel --version có thể chạy từ bất kỳ đâu – 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 cài đặt ứng dụng dành cho thiết bị di động Brazil để biết thêm thông tin.

Các tùy 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ỉ các phần đã thay đổi kể từ bản dựng cuối cùng. Thao tác này không thể cập nhật các tài nguyên được tham chiếu từ AndroidManifest.xml, mã gốc hoặc tài nguyên Java (chẳng hạn như các tài nguyên do Class.getResource() tham chiếu). Nếu những nội dung này thay đổi, bạn phải bỏ qua tuỳ chọn này. Trái với tinh thần của Bazel và do những hạn chế của nền tảng Android, trách nhiệm của người dùng là phải biết khi nào lệnh này đủ tốt và khi cần cài đặt đầy đủ.

Nếu bạn đang sử dụng một thiết bị có Marshmallow trở lên, hãy cân nhắc gắn cờ --split_apks.

--split_apks

Liệu có sử dụng APK phân tách để cài đặt và cập nhật ứng dụng trên thiết bị hay không. Chỉ hoạt động với các thiết bị chạy Marshmallow trở lên. Lưu ý rằng cờ --incremental là không cần thiết khi sử dụng --split_apks.

--start_app

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

--debug_app

Chờ trình gỡ lỗi được đính kèm trước khi khởi động ứng dụng ở trạng thái mới sau khi cài đặt. Tương đương với --start=DEBUG.

--start=_start_type_

Cách khởi động ứng dụng sau khi cài đặt. _start_type_s được hỗ trợ là:

  • NO không khởi động ứng dụng. Đây là chế độ mặc định.
  • COLD Khởi động ứng dụng từ trạng thái sạch sau khi cài đặt.
  • WARM Duy trì và khôi phục trạng thái của ứng dụng khi số 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.

Tuỳ chọn mặc định là sử dụng adb trong SDK Android do --android_sdk chỉ định.

--adb_arg=serial

Các đối số bổ sung cho adb. Các mã 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ị cần cài đặt. Ví dụ: để chọn thiết bị Android hoặc trình mô phỏng dùng:

% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef

gọi adb dưới dạng

adb -s deadbeef install ...

--incremental_install_verbosity=number

Độ chi tiết cho lượt cài đặt gia tăng. Đặt là 1 để ghi nhật ký gỡ lỗi được in ra bảng điều khiển.

dump

Lệnh dump in ra để kết xuất trạng thái nội bộ của máy chủ Bazel. Lệnh này chủ yếu dành cho các nhà phát triển Bazel sử dụng, vì vậy, kết quả của lệnh này không được chỉ định và có thể thay đổi.

Theo mặc định, lệnh sẽ chỉ in thông báo trợ giúp nêu rõ các tuỳ chọn có thể có để kết xuất các khu vực cụ thể của trạng thái Bazel. Để kết xuất trạng thái nội bộ, bạn phải chỉ định ít nhất một trong số các tùy chọn này.

Các tùy chọn sau được hỗ trợ:

  • --action_cache kết xuất nội dung của bộ nhớ đệm thao tác.
  • --packages kết xuất nội dung gói trong bộ nhớ đệm.
  • --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 tóm tắt quy tắc cho từng lớp quy tắc và lớp chương trì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 tiêu thụ bộ nhớ của quy tắc cũng sẽ được in.
  • --skylark_memory kết xuất tệp .gz tương thích với pprof thành đường dẫn đã chỉ định. Bạn phải bật theo dõi bộ nhớ để tính năng này hoạt động.

Theo dõi bộ nhớ

Một số lệnh dump yêu cầu theo dõi bộ nhớ. Để bật tùy chọn này, bạn phải chuyển cờ khởi động cho Bazel:

  • --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
  • --host_jvm_args=-DRULE_MEMORY_TRACKER=1

Tác nhân java được kiểm tra trong Bazel tại third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar, vì vậy, hãy đảm bảo bạn điều chỉnh $BAZEL để lưu giữ kho lưu trữ Bazel của bạn.

Đừng quên tiếp tục chuyển các tuỳ chọn này cho 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 cấu hình theo dõi JSON trước đó được thu thập trong lệnh gọi Bazel.

canonicalize-flags

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

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

--output_base=dir

Tuỳ chọn này yêu cầu một đối số đường dẫn mà 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á dùng để định vị máy chủ Bazel. Khi thay đổi cơ sở đầu ra, bạn thay đổi máy chủ sẽ xử lý lệnh.

Theo mặc định, cơ sở đầu ra được lấy từ tên đăng nhập của người dùng và tên của thư mục không gian làm việc (thực ra là chuỗi đại diện MD5), vì vậy, một giá trị thông thường sẽ có dạng như sau: /var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e.

Ví dụ:

 OUTPUT_BASE=/var/tmp/google/_bazel_johndoe/custom_output_base
% bazel --output_base ${OUTPUT_BASE}1 build //foo  &  bazel --output_base ${OUTPUT_BASE}2 build //bar

Trong lệnh này, hai lệnh Bazel chạy đồng thời (do toán tử &amp; shell), mỗi lệnh sử dụng một bản sao máy chủ Bazel khác nhau (do các cơ sở dữ liệu đầ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ủ, thao tác này sẽ xử lý tuần tự: xây dựng //foo trước, sau đó là bản dựng tăng dần //bar.

--output_user_root=dir

Trỏ tới thư mục gốc nơi tạo cơ sở đầu ra và cơ sở cài đặt. Thư mục không được tồn tại hoặc thuộc quyền sở hữu của người dùng gọi. Trước đây, tệp này được phép trỏ đến một thư mục dùng chung cho nhiều người dùng khác nhau, nhưng tệp này không còn được phép nữa. Điều này có thể được cho phép sau khi giải quyết vấn đề #11100.

Nếu bạn chỉ định tuỳ chọn --output_base, tuỳ chọn này sẽ ghi đè bằng cách sử dụng --output_user_root để tính cơ sở đầu ra.

Vị trí cơ sở cài đặt được tính toán dựa trên --output_user_root, cùng với danh tính MD5 của các tệp nhị phân nhúng của Bazel.

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

--server_javabase=dir

Chỉ định máy ảo Java mà Bazel chạy. Giá trị phải là đường dẫn đến thư mục chứa JDK hoặc JRE. Không được là nhãn. Tuỳ chọn này sẽ xuất hiện trước lệnh Bazel bất kỳ, ví dụ:

  % bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo

Cờ này không ảnh hưởng đến các JVM được sử dụng trong các quy trình phụ của Bazel, chẳng hạn như các ứ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à "bên trái" --host_javabase), 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à "bên phải" --host_javabase).

--host_jvm_args=string

Chỉ định một tuỳ chọn khởi động để truyền đến máy ảo Java mà 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ể sử dụng tùy chọn này nhiều lần với các đối số riêng lẻ. Xin lưu ý rằng hiếm khi cần đặt cờ này. Bạn cũng có thể truyền một danh sách các chuỗi được phân tách bằng dấu cách, mỗi chuỗi trong số đó sẽ được hiểu là một đối số JVM riêng biệt, nhưng tính năng này sẽ sớm ngừng hoạt động.

Điều này không ảnh hưởng đến bất kỳ JVM nào được sử dụng bởi các quy trình phụ của Bazel: ứng dụng, kiểm thử, công cụ, v.v. Để chuyển các tuỳ chọn JVM sang các chương trình Java có thể thực thi, dù chạy bằng bazel run hay trên dòng lệnh, bạn đều nên sử dụng đối số --jvm_flags mà tất cả chương trình java_binaryjava_test hỗ trợ. Ngoài ra, để kiểm thử, hãy 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ừ một trình gỡ lỗi tuân thủ JDWP trước khi gọi phương thức chính của Bazel. Việc này chủ yếu dành cho 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 JRE đã nhúng không có sẵn. Bạn có thể sử dụng --explicit_server_javabase để chọn một JRE rõ ràng để chạy Bazel.

--batch

Chế độ hàng loạt khiến Bazel không sử dụng chế độ máy khách/máy chủ tiêu chuẩn mà thay vào đó sẽ chạy quy trình bazel java cho một lệnh duy nhất đã được sử dụng cho các ngữ nghĩa có thể dự đoán nhiều hơn liên quan đến việc xử lý tín hiệu, kiểm soát công việc và kế thừa biến môi trường, đồng thời cần thiết để chạy bazel trong một thư viện gốc.

Chế độ lô giữ lại ngữ nghĩa trong hàng đợi phù hợp trong cùng một dữ liệu đầu ra. Tức 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ạy Bazel ở chế độ hàng loạt trên máy khách có máy chủ đang chạy, thì trước tiên, máy chủ đó sẽ loại bỏ 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. Điều này là do bộ nhớ đệm của tệp bản dựng có chứa bộ nhớ lưu trữ, vì vậy, bộ nhớ đệm không được bảo lưu giữa các lệnh gọi lô tuần tự. Do đó, việc sử dụng chế độ hàng loạt thường có ý nghĩa 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

Tùy chọn này chỉ định khoảng thời gian tính bằng giây mà quy trình máy chủ Bazel sẽ đợi sau yêu cầu cuối cùng của ứng dụng trước khi thoát. Giá trị mặc định là 10800 (3 giờ). --max_idle_secs=0 sẽ khiến cho quá trình máy chủ Bielel tồn tại vô thời hạn.

Các tập lệnh gọi Bazel có thể sử dụng tùy chọn này để đảm bảo rằng họ không rời khỏi quy trình máy chủ Bazel trên máy của người dùng khi họ không chạy. Ví dụ: một tập lệnh gửi trước có thể muốn gọi bazel query để đảm bảo thay đổi đang chờ xử lý của người dùng không đưa vào các phần phụ thuộc không mong muốn. Tuy nhiên, nếu người dùng chưa từng tạo bản dựng gần đây trong không gian làm việc đó, thì tập lệnh gửi trước sẽ khởi động máy chủ Bazel là không mong muốn. 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 khiến một máy chủ mới khởi động thì máy chủ đó sẽ thoát ngay lập tức. Tuy nhiên, nếu đã có máy chủ đang chạy, thì máy chủ đó sẽ tiếp tục chạy cho đến khi không hoạt động trong thời gian thông thường. Tất nhiên, bộ hẹn giờ không hoạt động của máy chủ hiện có sẽ được đặt lại.

--[no]shutdown_on_low_sys_mem

Nếu bạn bật và đặt --max_idle_secs thành thời lượng dương, thì sau một thời gian máy chủ bản dựng ngừng hoạt động, hãy tắt máy chủ khi hệ thống sắp hết bộ nhớ. Chỉ Linux.

Ngoài việc 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ủ không hoạt động trong một thời gian. Nếu bộ nhớ hệ thống có sẵn quá thấp, máy chủ sẽ thoát.

--[no]block_for_lock

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

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

--io_nice_level=n

Đặt cấp độ từ 0 đến 7 để lên lịch IO hiệu quả nhất. 0 là ưu tiên cao nhất, 7 là thấp nhất. Trình lập lịch trình dự đoán chỉ có thể đáp ứng mức độ ưu tiên 4. Giá trị âm sẽ bị bỏ qua.

--batch_cpu_scheduling

Dùng tính năng lên lịch CPU của batch cho Bazel. Chính sách này hữu ích đối với những khối lượng công việc không tương tác, nhưng không muốn giảm giá trị của khối lượng công việc. Xem 'man 2 sched_setscheduler'. Chính sách này có thể mang lại khả năng tương tác hệ thống tốt hơn với chi phí thông qua Bazel.

Tùy chọn khác

--[no]announce_rc

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

--color (yes|no|auto)

Tuỳ chọn này xác định liệu Bazel có sử dụng màu để đánh dấu kết quả trên màn hình hay không.

Nếu bạn đặt tùy chọn này thành yes, đầ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 màu đầu ra nếu đầu ra được gửi đến thiết bị đầu cuối và biến môi trường TERM được đặt thành giá trị không phải dumb, emacs hoặc xterm-mono. Nếu bạn đặt tuỳ chọn này thành no, thì đầu ra màu sẽ bị tắt, bất kể đầu ra có phải là dòng lệnh và không phân biệt chế độ cài đặt của biến môi trường TERM.

--config=name

Chọn phần cấu hình bổ sung từ các tệp rc; đối với command hiện tại, phần này cũng lấy các tùy chọn từ command:name nếu phần đó tồn tại. Có thể được chỉ định nhiều lần để thêm cờ từ một số phần cấu hình. Mở rộng có thể tham chiếu đến các định nghĩa khác (ví dụ: mở rộng có thể được xâu chuỗi).

--curses (yes|no|auto)

Tuỳ chọn này xác định liệu Bazel có sử dụng các nút điều khiển con trỏ trong đầu ra màn hình hay không. Điều này giúp giảm bớt dữ liệu cuộn và luồng đầu ra nhỏ gọn, dễ đọc hơn từ Bazel. Ứng dụng này hoạt động tốt với --color.

Nếu bạn đặt tùy chọn này thành yes, tùy chọn sử dụng các nút điều khiển con trỏ sẽ được bật. Nếu bạn đặt tùy chọn này thành no, tùy chọn kiểm soát con trỏ sẽ 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ác điều kiện tương tự 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 Bloaz tạo ra, cho biết thời gian thông báo được hiển thị.