Lệnh và tùy chọn

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Báo cáo sự cố Xem nguồn

Trang này trình bày các tùy chọn có sẵn bằng 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 (Tạo bằng Bazel).

Cú pháp mục tiêu

Một số lệnh, chẳng hạn như build hoặc test, có thể hoạt động trên danh sách mục tiêu. Các thành phần này sử dụng cú pháp linh hoạt hơn so với nhãn. Điều này được đề cập trong mục Chỉ định mục tiêu để tạo.

Tùy chọn

Các phần sau đây mô tả các tùy chọn có sẵn trong bản dựng. Khi bạn sử dụng --long trong 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 tùy 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ẽ thắng. Các tuỳ chọn có thể được chỉ định nhiều lần được xác định trong trợ giúp trực tuyến bằng văn bản "có thể được sử dụng nhiều lần".

Vị trí gói

--package_path

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

Bazel tìm thấy các gói của mình bằng cách tìm đường dẫn gói. Đây là danh sách các thư mục bazel được sắp xếp theo thứ tự dấu hai chấm, mỗi thư mục là thư mục gốc của một 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

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

Nếu bạn sử dụng một đường dẫn gói không mặc định, hãy chỉ định đường dẫn đó trong tệp cấu hình Bazel để thuận tiện.

Bazel không yêu cầu bất kỳ gói nào nằm trong thư mục hiện tại, vì vậy, bạn có thể tạo bản dựng từ một không gian làm việc bazel trống nếu có thể tìm thấy tất cả các gói cần thiết ở nơi khác trên đường dẫn gói.

Ví dụ: Xây dựng từ một ứng dụng trống

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

--deleted_packages

Tuỳ chọn này chỉ định danh sách các gói được phân tách bằng dấu phẩy mà Bazel phải xem xét để xoá và không cố gắng tải từ bất kỳ thư mục nào trên đường dẫn gói. Bạn có thể sử dụng công cụ này để mô phỏng quá trình xóa các gói mà không thực sự xóa gói.

Kiểm tra lỗi

Những tuỳ chọn này kiểm soát hoạt độ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 tắt, thì tính năng kiểm tra chế độ hiển thị sẽ bị giảm hạng thành cảnh báo. Giá trị mặc định của tuỳ chọn này là true (đúng), để theo mặc định, tính năng kiểm tra chế độ hiển thị sẽ được thực hiện.

--output_filter=regex

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

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

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

Cờ công cụ

Những tuỳ chọn này kiểm soát những tùy chọn mà Bazel sẽ chuyển sang các công cụ khác.

--copt=cc-option

Tuỳ chọn này lấy một đối số cần truyền đến trình biên dịch. Đối số sẽ được chuyển đến trình biên dịch mỗi khi được gọi để xử lý trước, biên dịch và/hoặc tập hợp C, C++ hoặc mã tập hợp. Hệ thống sẽ không chuyển URL này 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

Tùy chọn này lấy một đối số cần truyền cho trình biên dịch đối với các tệp nguồn được biên dịch trong cấu hình máy chủ lưu trữ. Điều này tương tự như tùy chọn --copt nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.

--host_conlyopt=cc-option

Tuỳ chọn này lấy một đối số cần truyền đến trình biên dịch cho các tệp nguồn C được biên dịch trong cấu hình máy chủ lưu trữ. Điều này tương tự như tùy chọn --conlyopt nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.

--host_cxxopt=cc-option

Tuỳ chọn này lấy một đối số cần truyền đến trình biên dịch cho các tệp nguồn C++ được biên dịch trong cấu hình máy chủ lưu trữ. Điều này tương tự như tùy chọn --cxxopt nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.

--host_linkopt=linker-option

Tuỳ chọn này lấy một đối số cần truyền cho trình liên kết đối với các tệp nguồn được biên dịch trong cấu hình máy chủ lưu trữ. Điều này tương tự như tùy chọn --linkopt nhưng chỉ áp dụng cho cấu hình máy chủ lưu trữ.

--conlyopt=cc-option

Tuỳ chọn này 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, 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 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ư -fpermissive hoặc -fno-implicit-templates) bằng cách sử dụng --cxxopt.

Ví dụ:

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

--linkopt=linker-option

Tùy chọn này lấy một đối số cần truyền đến trình biên dịch khi liên kết.

Điều này tương tự như --copt, nhưng chỉ áp dụng cho việc liên kết, không áp dụng cho 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ỉ có ý nghĩa tại thời điểm liên kết (chẳng hạn như -lssp hoặc -Wl,--wrap,abort) bằng cách sử dụng --linkopt. Ví dụ:

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

Quy tắc tạo bản dựng cũng có thể chỉ định các tùy chọn liên kết trong thuộc tính của quy tắc. Cài đặt của tuỳ chọn này luôn được ưu tiên. Ngoài ra, hãy xem bài viết cc_library.linkopts.

--strip (always|never|sometimes)

Tuỳ chọn này xác định xem 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 bỏ thông tin gỡ lỗi. --strip=never có nghĩa là không bao giờ loại bỏ thông tin gỡ lỗi. Giá trị mặc định của --strip=sometimes có nghĩa là dải ô nếu --compilation_modefastbuild.

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

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

Tuỳ chọn --strip của Bazel tương ứng với tuỳ chọn --strip-debug của ld: tuỳ chọn này chỉ xoá thông tin gỡ lỗi. Nếu vì lý do nào đó bạn muốn loại bỏ tất cả các biểu tượng, không chỉ biểu tượng gỡ lỗi, bạn 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 đến Bazel. Ngoài ra, xin lưu ý rằng việc đặt cờ --strip của Bazel sẽ ghi đè --linkopt=-Wl,--strip-all, vì vậy bạn chỉ nên đặt một trong hai cờ này.

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

--stripopt=strip-option

Đây là một tuỳ chọn bổ sung để chuyể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 dữ liệu đầu ra của cấu hình FDO (tối ưu hoá theo hướng 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 được dùng làm tiền tố thư mục cho cây thư mục tệp đối tượng trên mỗi tệp .gcda chứa thông tin hồ sơ cho mỗi tệp .o.

Sau khi cây dữ liệu hồ sơ được tạo, cây hồ sơ sẽ được nén lại và cung cấp cho tuỳ chọn --fdo_optimize=profile-zip BBel để bật tính năng biên dịch được tối ưu hoá FDO.

Đối với trình biên dịch LLVM, đối số cũng là thư mục mà(các) tệp dữ liệu hồ sơ LLVM thô được kết xuất. Ví dụ: --fdo_instrument=/path/to/rawprof/dir/.

Bạn không thể sử dụng đồng thời các tuỳ chọn --fdo_instrument--fdo_optimize.

--fdo_optimize=profile-zip

Tuỳ chọn --fdo_optimize cho phép sử dụng thông tin hồ sơ tệp cho mỗi đối tượng để thực hiện việc tối ưu hoá FDO (tối ưu hoá theo phản hồi) khi biên dịch. Đối với GCC, đối số được cung cấp là tệp zip chứa cây tệp đã tạo trước đó của các tệp .gcda chứa thông tin hồ sơ cho mỗi tệp .o.

Ngoài ra, đối số được cung cấp có thể trỏ đến một hồ sơ tự động được xác định bằng tiện ích .afdo.

Đối với trình biên dịch LLVM, đối số được cung cấp phải trỏ đến tệp đầu ra 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 .profdata.

Bạn không thể sử dụng đồng thời các tuỳ chọn --fdo_instrument--fdo_optimize.

--java_language_version=version

Tùy chọn này chỉ định phiên bản của các nguồn Java. Ví dụ:

  % bazel build --java_language_version=8 java/com/example/common/foo:all

biên dịch và chỉ cho phép các cấu trúc tương thích với thông số kỹ thuật Java 8. Giá trị mặc định là 11. --> Các giá trị có thể là: 8, 9, 10, 11, 14 và 15 và có thể được mở rộng bằng cách đăng ký các chuỗi công cụ Java tùy chỉnh bằng default_java_toolchain.

--tool_java_language_version=version

Phiên bản ngôn ngữ Java dùng để tạo các công cụ được thực thi trong bản dựng. Giá trị mặc định là 11.

--java_runtime_version=version

Tùy chọn này chỉ định phiên bản của JVM được sử dụng để thực thi mã và chạy thử nghiệm. 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à localjdk. Các giá trị có thể là: localjdk, localjdk_version, remotejdk_11remote_jdk17. Bạn có thể mở rộng các giá trị này bằng cách đăng ký JVM tuỳ chỉnh bằng cách sử dụng quy tắc lưu trữ local_java_repository hoặc remote_java_repostory.

--tool_java_runtime_version=version

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

--jvmopt=jvm-option

Tùy chọn này cho phép chuyển các đối số tùy chọn tới 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 từng đối số. Ví dụ:

  % bazel build --jvmopt="-server -Xms256m" java/com/example/common/foo:all

sẽ sử dụng máy ảo (VM) để khởi chạy tất cả tệp nhị phân Java và đặt kích thước vùng nhớ khối xếp khi khởi động cho máy ảo thành 256 MB.

--javacopt=javac-option

Tùy chọn này cho phép chuyển các đối số tùy 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 từng đối số. Ví dụ:

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

sẽ xây dựng 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 cho mỗi quy tắc. Thông số kỹ thuật cuối cùng của mọi tuỳ chọn đối với javac sẽ thắng. Các tuỳ chọn mặc định cho Java 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 phần phụ thuộc trực tiếp hay không. Mục tiêu Java phải khai báo rõ ràng tất cả mục tiêu được sử dụng trực tiếp dưới dạng phần phụ thuộc. Cờ này hướng dẫn javac xác định các jar thực sự được dùng để kiểm tra loại trong mỗi tệp java và cảnh báo/lỗi nếu chúng không phải là kết quả của phần phụ thuộc trực tiếp của mục tiêu hiện tại.

  • off có nghĩa là tính năng kiểm tra bị 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 từng phần phụ thuộc trực tiếp bị thiếu.
  • default, stricterror, tất cả Javac sẽ tạo ra lỗi thay vì cảnh báo, khiến mục tiêu hiện tại không thể tạo nếu không tìm thấy phần phụ thuộc trực tiếp nào. Đây cũng là hành vi mặc định khi cờ không được chỉ định.

Ngữ nghĩa bản dựng

Các tùy chọn này ảnh hưởng đến các 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) sẽ 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 khác nhau cho từng chế độ biên dịch khác nhau, vì vậy, bạn có thể chuyển đổi giữa các chế độ mà không cần tạo lại toàn bộ mỗi chế độ.

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

--cpu=cpu

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

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

--experimental_action_listener=label

Tuỳ chọn experimental_action_listener hướng dẫn Bazel sử dụng 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 tùy chọn này thành true, thì các hành động bổ sung được chỉ định bởi tùy chọn dòng lệnh --experimental_action_listener sẽ chỉ được lên lịch cho các mục tiêu cấp cao nhất.

--experimental_extra_action_filter=regex

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

Cờ này chỉ áp dụng kết hợp với cờ --experimental_action_listener.

Theo mặc định, tất cả extra_actions trong quá trình đóng chuyển tiếp của các mục tiêu cần xây dựng đã yêu cầu sẽ được lên lịch để thực thi. --experimental_extra_action_filter sẽ hạn chế việc lên lịch đến 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ập lịch của extra_actions để chỉ áp dụng cho các hành động mà nhãn của chủ sở hữu chứa "/bar/":

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

--host_cpu=cpu

Tuỳ chọn này chỉ định tên của cấu trúc CPU 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 bắc cầu của một số 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 tạm thời của quy tắc android_binary và quy tắc cc_binary, thì cc_library sẽ được tạo ít nhất hai lần: một lần cho mỗi CPU được chỉ định bằng --fat_apk_cpu cho quy tắc android_binary và một lần cho CPU được chỉ định bằng --cpu cho quy tắc cc_binary.

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

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

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

Khi có mặt, mọi tệp C++ có nhãn hoặc đường dẫn thực thi khớp với một trong các biểu thức biểu thức chính quy bao gồm và không khớp với bất kỳ biểu thức loại trừ nào đều sẽ được tạo bằng các tùy chọn nhất định. 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ả phần mở rộng) của tệp C++. Báo cáo này cũng bao gồm mọi tiền tố phụ thuộc vào nền tảng.

Để khớp với các tệp được tạo (chẳng hạn như đầu ra genrule) Bazel chỉ có thể sử dụng đường dẫn thực thi. Trong trường hợp này, biểu thức chính quy không được bắt đầu bằng "//" vì đ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. Tệp này sẽ khớp với mọi tệp .pb.cc trong 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 như thế nào. Ví dụ: bạn có thể biên dịch bằng --compilation_mode=opt và biên dịch có chọn lọc một số tệp được bật tính năng tối ưu hoá mạnh hơn hoặc đã tắt tính năng tối ưu hoá.

Cảnh báo: Nếu một số tệp được biên dịch chọn lọc bằng các biểu tượng gỡ lỗi, thì các biểu tượng này có thể bị xoá trong quá trình liên kết. Bạn có thể ngăn chặn điều này bằng cách đặt --strip=never.

Cú pháp: [+-]regex[,[+-]regex]...@option[,option]... Trong đó, regex là viết tắt của một biểu thức chính quy có thể có tiền tố là + để xác định các mẫu bao gồm và có - để xác định các 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 câu lệnh đó như \,. 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 tuỳ chọn.

Ví dụ: --per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs thêm các tùy chọn -O0-fprofile-arcs vào dòng lệnh của trình biên dịch C++ đối với tất cả các tệp .cc trong //foo/, ngoại trừ file.cc.

--dynamic_mode=mode

Xác định xem các tệp nhị phân C++ có được liên kết động hay không, tương tác với thuộc tính liên kết tĩnh 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 tự động liên kết. Hãy xem linkstatic để biết thêm thông tin.
  • fully: Liên kết tất cả các mục tiêu một cách linh động. Cách 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 như là tĩnh. Nếu bạn đặt -static trong các đường liên kết, mục tiêu sẽ chuyển sang trạng thái tĩnh hoàn toàn.

--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ì các tệp .o. Việc này cũng sẽ giúp giảm kích thước đầu vào của các đường liên kết và có thể giảm thời gian liên kết.

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

--[no]force_pic

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

--android_resource_shrinking

Chọn có thực hiện rút gọn tài nguyên cho các quy tắc android_binary hay không. Đặt mặc định cho thuộc tính shrink_resources trên các quy tắc của android_binary; xem tài liệu về quy tắc đó để biết thêm chi tiết. Tính năng mặc định là tắt.

--custom_malloc=malloc-library-target

Khi được chỉ định, luôn dùng phương thức triển khai malloc nhất định, ghi đè tất cả các thuộc tính malloc="target", kể cả trong những mục tiêu sử dụng mặc định (bằng cách không chỉ định malloc).

--crosstool_top=label

Tuỳ chọn này chỉ định vị trí của bộ công cụ biên dịch crosstool, được sử dụng cho tất cả hoạt động biên dịch C++ trong một bản dựng. Bazel sẽ tìm vị trí đó của tệp CROSSTOOL và sử dụng vị trí đó để 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 máy chủ, chẳng hạn như các công cụ chạy trong quá trình tạo bản dựng. Mục đích chính của cờ này là bật tính năng biên dịch chéo.

--apple_crosstool_top=label

Công cụ chéo được sử dụng để biên dịch các quy tắc C/C++ trong quy tắc chuyển tiếp deps của objc*, ios* và apple*. Đối với những mục tiêu đó, cờ này sẽ ghi đè lên --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 bắc cầu của các quy tắc android_binary. Điều này rất hữu ích nếu các mục tiêu khác trong bản dựng yêu cầu một công cụ chéo khác. Tùy chọn mặc định là sử dụng công cụ chéo được tạo bằng quy tắc android_ndk_repository 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ẽ được dùng để biên dịch các tệp nhị phân trong quá trình xây dựng. Nếu muốn tạo bằng một công cụ 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 chuỗi công cụ nền tảng/SDK Android và thư viện thời gian chạy Android sẽ được dùng để tạo mọi quy tắc liên quan đến Android.

SDK Android sẽ 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 được 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 máy chủ, chẳng hạn như cho các công cụ chạy trong quá trình tạo bản dựng. Mục đích chính của cờ này là bật tính năng biên dịch chéo.

--javabase=(label)

Tuỳ chọn này đặt label của chế độ cài đặt Java cơ sở để dùng cho bazel run, bazel test và các tệp nhị phân Java do các quy tắc java_binaryjava_test tạo ra. Các biến JAVABASEJAVA "Make" được 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 máy chủ, ví dụ: cho các công cụ bản dựng máy chủ bao gồm JavaBuilder và Singlejar.

Thao tác này không chọn trình biên dịch Java được 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 nhiều đến các tệp đầu ra do bản dựng tạo ra. Thông thường, hiệu ứng chính của chúng phụ thuộc vào tốc độ của bản dựng.

--spawn_strategy=strategy

Tuỳ chọn này kiểm soát vị trí và cách thực thi các 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ả tệp đầu vào, phần phụ thuộc dữ liệu và các công cụ phải được liệt kê dưới dạng phần phụ thuộc trực tiếp trong các thuộc tính srcs, datatools. Theo mặc định, Bazel bật tính năng hộp cát cục bộ trên các hệ thống hỗ trợ thực thi hộp cát.
  • local khiến các lệnh được thực thi dưới dạng quy trình phụ cục bộ.
  • worker khiến các lệnh được thực thi bằng cách sử dụng trình chạy liên tục (nếu có).
  • docker khiến các lệnh được thực thi bên trong hộp cát của Docker trên máy cục bộ. Để làm 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; tính năng này chỉ dùng được nếu trình thực thi từ xa được định cấu hình riêng.

--strategy mnemonic=strategy

Tùy 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 Menrule 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 động của các chiến lược đó.

--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. Hãy xem --per_file_copt để biết thông tin chi tiết về việc so khớp regex_filter. Hãy xem --spawn_strategy để biết các chiến lược được hỗ trợ và tác động của các chiến lược đó.

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

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

--jobs=n (– j)

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

--progress_report_interval=n

Bazel sẽ in báo cáo tiến độ về 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 sẽ đặt tần suất báo cáo, tiến trình sẽ được in n giây một lần.

Giá trị mặc định là 0, 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 tuỳ chọn điều khiển con trỏ, như được chỉ định bởi --curses, tiến trình sẽ được báo cáo mỗi giây.

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

Các tuỳ chọn này chỉ định số 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ể xem xét khi lên lịch cho các hoạt động tạo và kiểm thử để chạy trên máy. Các cờ này lấy một số nguyên hoặc một từ khoá (Host_RAM hoặc Host_CPUS) theo sau là [-|*float] (ví dụ: --local_cpu_resources=2, --local_ram_resources=HOST_RAM*.5, --local_cpu_resources=HOST_CPUS-1). Các cờ này là độc lập; có thể đặt một hoặc cả hai cờ. Theo mặc định, Bazel sẽ ước tính dung lượng RAM và số lõi CPU ngay 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 liệu có nên xây dựng các đường liên kết tượng trưng cho tệp chạy cho các 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 xem 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 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 của chúng sẽ được tập hợp cùng nhau ở 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 của bạn như tệp nhị phân hoặc kiểm thử tương ứng. Trong quá trình thực thi kiểm thử, bạn có thể truy cập vào các tệp chạy bằng cách sử dụng đường dẫn có dạng $TEST_SRCDIR/workspace/packagename/filename. Cây runfiles đảm bảo rằng các kiểm thử có quyền truy cập vào tất cả các tệp mà các kiểm thử này có phần phụ thuộc được khai báo và không có gì khác. Theo mặc định, cây runfiles được triển khai bằng cách tạo một tập hợp các đường liên kết tượng trưng cho các tệp bắt buộc. Khi tập hợp các đường liên kết tăng lên, chi phí của hoạt động này cũng tăng lên, và đối với một số bản dựng lớn, việc này có thể đóng góp đáng kể vào thời gian xây dựng tổng thể, đặc biệt là vì mỗi kiểm thử (hoặc ứng dụng) riêng lẻ đều yêu cầu cây chạy tệp riêng.

--[no]build_runfile_manifests

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

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

--[no]discard_analysis_cache

Khi bật tuỳ chọn này, Bazel sẽ huỷ bộ nhớ đệm phân tích ngay trước khi quá trình thực thi bắt đầu, nhờ đó giải phóng thêm bộ nhớ (khoảng 10%) cho giai đoạn thực thi. Điểm hạn chế là các bản dựng gia tăng dần sẽ chậm hơn. Hãy xem thêm về 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, việc tạo bản dựng càng nhiều càng tốt ngay cả khi gặp lỗi. Tùy chọn này cho phép hành vi đó. Và khi được chỉ định, bản dựng sẽ cố gắng tạo mọi mục tiêu có điều kiện tiên quyết đã được tạo thành công, nhưng sẽ bỏ qua lỗi.

Mặc dù tùy 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 nó cũng ảnh hưởng đến giai đoạn phân tích: nếu một số mục tiêu được chỉ định trong lệnh tạo, nhưng chỉ một số mục tiêu có thể được phân tích thành công, bản dựng sẽ dừng lại kèm theo 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ỉ dành cho các mục tiêu đã được phân tích thành công.

--[no]use_ijars

Tùy chọn này thay đổi cách java_library mục tiêu được Bazel biên dịch. Thay vì sử dụng kết quả 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 và phương thức truy cập công khai, được bảo vệ và mặc định (gói) và sử dụng các jar giao diện để biên dịch các mục tiêu phụ thuộc. Điều này giúp bạn có thể tránh việc biên dịch lại khi thay đổi chỉ đối với nội dung 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 cho phép đối tượng dùng chung trên giao diện làm cho các tệp nhị phân và các thư viện dùng chung khác phụ thuộc vào giao diện của đối tượng dùng chung, thay vì triển khai. Khi chỉ triển khai thay đổi, Bazel có thể tránh việc tạo lại các mục tiêu phụ thuộc vào thư viện dùng chung bị thay đổi một cách không cần thiết.

Lựa chọn đầu ra

Những 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 ở trạng thái tắt, giai đoạn thực thi sẽ bị bỏ qua và chỉ có hai giai đoạn đầu tiên là tải và phân tích.

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

--[no]build_tests_only

Nếu được chỉ định, Bazel sẽ chỉ tạo những yếu tố cần thiết để chạy các quy tắc *_testtest_suite chưa đượ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 sẽ bị tắt và Bazel sẽ tạo mọi thứ cần thiết, bao gồm cả các quy tắc *_testtest_suite đã bị lọc khỏi quá trình kiểm thử. Cách này 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ả sự cố về 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ả mục tiêu đã chỉ định có được cập nhật hay không. Nếu vậy, bản dựng sẽ hoàn tất thành công như bình thường. Tuy nhiên, nếu có tệp đã lỗi thời, thay vì được tạo, thì hệ thống sẽ báo cáo lỗi và tạo bản dựng không thành công. Tuỳ chọn này có thể hữu ích để xác định xem một bản dựng có được thực hiện gần đây hơn so với bản chỉnh sửa nguồn (ví dụ: để kiểm tra trước khi gửi) mà không làm phát sinh chi phí của bản dựng.

Xem thêm --check_tests_up_to_date.

--[no]compile_one_dependency

Biên dịch một phần phụ thuộc duy nhất của các tệp đối số. Điều này sẽ hữu ích cho cú pháp kiểm tra tệp nguồn trong IDE, chẳng hạn như bằng cách tạo lại một mục tiêu duy nhất phụ thuộc vào tệp nguồn để phát hiện lỗi càng sớm càng tốt 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 túy liên quan đến thư mục đang hoạt động và một quy tắc phụ thuộc vào từng tên tệp nguồn. Cho

Nguồn C++ và Java, các quy tắc trong cùng một không gian ngôn ngữ được ưu tiên. Đối với nhiều quy tắc có cùng lựa chọn ưu tiên, quy tắc xuất hiện đầu tiên trong tệp XÂY DỰNG sẽ được chọn. Mẫu mục tiêu được đặt tên rõ ràng không tham chiếu đến tệp nguồn sẽ dẫn đến lỗi.

--save_temps

Tuỳ chọn --save_temps khiến các đầu ra tạm thời của trình biên dịch được lưu. Các tệp này bao gồm tệp .s (mã trình kết hợp), tệp .i (C được xử lý trước) và tệp .ii (tệp C++) đượ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 tập hợp các mục tiêu được chỉ định trên dòng lệnh.

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

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

--build_tag_filters=tag[,tag]*

Nếu được chỉ định, Bazel sẽ chỉ xây dựng 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ẻ bản dựng được chỉ định dưới dạng danh sách từ khóa thẻ được phân tách bằng dấu phẩy, tùy chọn trước dấu '-' được sử dụng để biểu thị 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 mục tiêu đó, hãy lọc các mục tiêu thử nghiệm bằng cách sử dụng --test_tag_filters hoặc loại trừ rõ ràng các mục tiêu đó.

--test_size_filters=size[,size]*

Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo nếu --build_tests_only cũng được chỉ định) chỉ kiểm thử các mục tiêu có kích thước nhất định. Bộ lọc kích thước kiểm thử được chỉ định là danh sách các giá trị kích thước kiểm thử được phân tách bằng dấu phẩy (nhỏ, vừa, lớn hoặc lớn), đứng trước dấu '-' được dùng để biểu thị kích thước kiểm thử bị loại trừ. Ví dụ:

  % bazel test --test_size_filters=small,medium //foo:all
  % bazel test --test_size_filters=-large,-enormous //foo:all

sẽ chỉ kiểm tra các kiểm thử nhỏ và trung bình bên trong //foo.

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

--test_timeout_filters=timeout[,timeout]*

Nếu được chỉ định, Bazel sẽ chỉ kiểm thử (hoặc tạo nếu --build_tests_only cũng được chỉ định) chỉ kiểm thử các mục tiêu có thời gian chờ đã cho. Bộ lọc thời gian chờ kiểm thử được chỉ định dưới dạng danh sách 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), đứ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_filter để tìm hiểu về cú pháp ví dụ.

Theo mặc định, tính năng lọc thời gian chờ thử nghiệm 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 làm danh sách các từ khoá thẻ được phân tách bằng dấu phẩy, tùy chọn bắt đầu bằng dấu '-' dùng để biểu thị các thẻ bị loại trừ. Các thẻ bắt buộc cũng có thể có dấu (+) trước đó.

Ví dụ:

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

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

Theo mặc định, tính năng lọc thẻ 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, sử dụng chuỗi "foo". Bazel sẽ chỉ kiểm thử (hoặc tạo --build_tests_only nếu cũng được chỉ định) chỉ các mục tiêu của 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ỉ kiểm thử các mục tiêu là các 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 phiên bản 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ố mục tiêu có thể được thực thi; trong một số trường hợp, chỉ có một số phương thức kiểm thử nhất định được chạy.

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

Độ chi tiết

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

--explain=logfile

Tuỳ chọn này yêu cầu một đối số tên tệp sẽ 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 mỗi bước của bản dựng, nguyên nhân tại sao quá trình thực thi được thực thi hay cập nhật. Nội dung giải thích được ghi vào logfile.

Nếu bạn gặp phải các bản dựng lại không mong muốn, tùy chọn này có thể giúp bạn hiểu lý do. Hãy thêm tệp 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 được thực thi không mong muốn. Tùy chọn này có thể phải chịu một hình phạt nhỏ về hiệu suất, vì vậy, bạn có thể muốn xóa tùy chọn này khi không còn cần đến.

--verbose_explanations

Tùy chọn này làm tăng độ chi tiết cho các nội dung giải thích đã tạo khi bật tùy chọn -giải thích.

Cụ thể, nếu tính năng giải thích chi tiết đang bật và tệp đầu ra được tạo lại vì lệnh dùng để xây dựng đã 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 tùy chọn này có thể làm tăng đáng kể độ dài của tệp giải thích đã tạo và mức phạt về hiệu suất khi sử dụng --explain.

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

--profile=file

Tuỳ chọn này sẽ lấy đối số tên tệp và khiến Bazel ghi dữ liệu phân tích vào 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. Cấu hình xây dựng có thể hữu ích trong việc hiểu được 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 ra thông báo tiến trình tải gói. Nếu chế độ này tắt, thông báo sẽ không xuất hiện.

--[no]show_progress

Tùy chọn này khiến thông báo tiến trình hiển thị; tùy chọn này được bật theo mặc định. Khi bạn tắt tính năng này, thông báo tiến trình sẽ bị chặn.

--show_progress_rate_limit=n

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

--show_result=n

Tuỳ chọn này kiểm soát việc in thông tin kết quả ở cuối lệnh bazel build. Theo mặc định, nếu một mục tiêu bản dựng được chỉ định, Bazel sẽ in một thông báo cho biết liệu mục tiêu có được cập nhật thành công hay không và 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 xuất hiện.

Mặc dù thông tin kết quả có thể hữu ích cho các bản dựng của một hoặc nhiều 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à làm phân tâm. tuỳ chọn này cho phép kiểm soát thông tin đó. --show_result lấy đối số số nguyên, là số lượng mục tiêu tối đa mà thông tin về kết quả đầy đủ sẽ được in. Theo mặc định, giá trị là 1. Trên ngưỡng này, không có 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 khiến thông tin kết quả bị chặn và giá trị rất lớn sẽ 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 thế giữa việc tạo một nhóm nhỏ mục tiêu (ví dụ: trong chu kỳ kiểm thử biên dịch-chỉnh sửa) và một nhóm lớn mục tiêu (ví dụ: khi thiết lập một không gian làm việc mới hoặc chạy thử nghiệm hồi quy). Trong trường hợp cũ, thông tin kết quả sẽ rất hữu ích, còn trong trường hợp sau là ít thông tin hơn. Như với tất cả tuỳ chọn, điều này có thể được chỉ định hoàn toàn thông qua tệp .bazelrc.

Các tệp được in để bạn dễ dàng sao chép và dán tên tệp vào shell, để chạy các tệp thực thi đã tạo. Thông báo "đã cập nhật" hoặc "không thành công" cho mỗi 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 xây dựng 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. Tùy chọn này cũng giữ lại các thư mục hộp cát để bạn có thể kiểm tra các 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 Bazel đang ở giai đoạn thực thi để in toàn bộ dòng lệnh cho từng lệnh trước khi thực thi.

  >>>>> # //examples/cpp:hello-world [action 'Linking examples/cpp/hello-world']
  (cd /home/johndoe/.cache/bazel/_bazel_johndoe/4c084335afceb392cfbe7c31afee3a9f/bazel && \
    exec env - \
    /usr/bin/gcc -o bazel-out/local-fastbuild/bin/examples/cpp/hello-world -B/usr/bin/ -Wl,-z,relro,-z,now -no-canonical-prefixes -pass-exit-codes -Wl,-S -Wl,@bazel-out/local_linux-fastbuild/bin/examples/cpp/hello-world-2.params)

Nếu có thể, các lệnh sẽ được in bằng cú pháp tương thích với Bourne shell, để bạn có thể dễ dàng sao chép và dán chúng vào lời nhắc lệnh shell. (Các dấu ngoặc đơn xung quanh được cung cấp để bảo vệ shell của bạn khỏi 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ác cây liên kết tượng trưng. Đối với những trường hợp này, không có dòng lệnh nào để hiển thị.

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

Xem thêm -- Và_failure ở bên dưới.

Để ghi nhật ký các lệnh con vào một tệp ở định dạng thân thiện với công cụ, hãy xem --execution_log_json_file--execution_log_binary_file.

--verbose_failures

Tùy chọn này khiến giai đoạn thực thi của Bazel in dòng lệnh đầy đủ cho các lệnh không thành công. Thao tác này có thể vô cùng hữu ích khi gỡ lỗi bản dựng không hoạt động.

Các lệnh không hoạt độ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 không gian làm việc

Sử dụng các tùy chọn này để "gắn dấu" tệp nhị phân do Bazel tạo: để nhúng thông tin bổ sung vào tệp nhị phân, chẳng hạn như bản sửa đổi kiểm soát nguồn hoặc thông tin khác có liên quan đến không gian làm việc. Bạn có thể sử dụng cơ chế này thông qua 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 kiểm soát 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, đây có thể là tệp thực thi bất kỳ. 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 sẽ in từ 0 cặp khóa/giá trị trở lên đối với đầu ra tiêu chuẩn, một mục nhập trên mỗi dòng, sau đó thoát bằng 0 (nếu không, bản dựng không thể hoạt động). Tên khoá có thể là bất kỳ ký tự nào nhưng chỉ được sử dụng chữ hoa và dấu gạch dưới. Dấu cách đầu tiên sau tên khoá sẽ tách tên đó 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ả khoá và giá trị đều không thể trải dài trên nhiều dòng. Không được sao chép khóa.

Bazel phân vùng các khoá thành hai nhóm: "stable" (ổn định) và "volatile". (Các tên "stable" (ổn định) và "volatile" có phần phản cảm, vì vậy, đừng suy nghĩ nhiều về các tên này.)

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

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

Hợp đồng là:

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

    Bazel luôn xuất ra các khoá ổn định sau:

    • BUILD_EMBED_LABEL: giá trị của --embed_label
    • BUILD_HOST: tên của máy chủ lưu trữ mà Bazel đang chạy
    • BUILD_USER: tên của người dùng mà Bazel đang chạy
  • Giá trị của khóa "volatile" có thể thay đổi thường xuyên. Bazel yêu cầu 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ả định rằng tệp biến động sẽ không bao giờ thay đổi. Nói cách khác, nếu tệp trạng thái dễ thay đổ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 giá trị đầu vào khác của các hành động đó thay đổi, thì Bazel sẽ chạy lại hành động đó và hành động sẽ thấy trạng thái biến động được cập nhật, nhưng chỉ riêng trạng thái biến động sẽ không vô hiệu hoá hành động đó.

    Bazel luôn tạo ra các khóa biến động sau:

    • BUILD_TIMESTAMP: thời gian tạo bản dựng tính bằng giây kể từ Unix Epoch (giá trị của System.currentTimeMillis() chia cho một nghìn)

Trên Linux/macOS, bạn có thể chuyể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ì thành công (thoát bằng 0) và không xuất kết quả nào. Trên Windows, bạn có thể chuyển đường dẫn true.exe của MSYS để đạt được hiệu quả tương tự.

Nếu lệnh trạng thái không gian làm việc không thành công (thoát khác 0) vì bất kỳ lý do gì, bản dựng sẽ không thành công.

Chương trình mẫu trên Linux bằng Git:

#!/bin/bash
echo "CURRENT_TIME $(date +%s)"
echo "RANDOM_HASH $(cat /proc/sys/kernel/random/uuid)"
echo "STABLE_GIT_COMMIT $(git rev-parse HEAD)"
echo "STABLE_USER_NAME $USER"

Chuyể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, kết hợp với thuộc tính quy tắc stamp, kiểm soát việc có nhúng thông tin bản dựng vào tệp nhị phân hay không.

Bạn có thể bật hoặc tắt tính năng đóng dấu rõ ràng theo từng quy tắc bằng cách sử dụng thuộc tính stamp. Vui lòng tham khảo Bách khoa toàn thư về bản dựng để biết thông tin chi tiết. Khi một quy tắc đặt stamp = -1 (mặc định cho các quy tắc *_binary), tùy chọn này sẽ xác định xem 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 máy chủ, bất kể tuỳ chọn này hay thuộc tính stamp. Đối với các quy tắc đã đặt stamp = 0 (mặc định cho các quy tắc *_test), tính năng đóng dấu sẽ bị tắt bất kể --[no]stamp. Việc chỉ định --stamp không buộc các mục tiêu phải tạo lại nếu phần phụ thuộc của các mục tiêu đó không thay đổi.

Việc đặt --nostamp nói chung là cần thiết cho hiệu suất bản dựng, vì tính năng này làm giảm sự biến động đầu vào và tối đa hoá việc lưu vào bộ nhớ đệm của bản dựng.

Nền tảng

Hãy sử dụng các tuỳ chọn này để kiểm soát máy chủ lưu trữ và các 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, cũng như để kiểm soát những nền tảng thực thi và chuỗi công cụ có sẵn cho các quy tắc của Bazel.

Vui lòng xem thông tin cơ bản trên Nền tảngChuỗi công cụ.

--platforms=labels

Nhãn của các quy tắc nền tảng mô tả các nền tảng mục tiêu cho lệnh hiện tại.

--host_platform=label

Nhãn của quy tắc nền tảng mô tả hệ thống lưu trữ.

--extra_execution_platforms=labels

Các nền tảng có sẵn dưới dạng nền tảng thực thi để chạy các hành động. Bạn có thể chỉ định các nền tảng theo mục tiêu chính xác hoặc theo mẫu mục tiêu. Các nền tảng này sẽ được xem xét trước khi được khai báo trong tệp WORKSPACE bằng register_execution_platforms().

--extra_toolchains=labels

Các quy tắc chuỗi công cụ cần được xem xét trong quá trình phân giải chuỗi công cụ. Chuỗi công cụ có thể được chỉ định theo mục tiêu chính xác hoặc dưới dạng mẫu mục tiêu. Các chuỗi công cụ này sẽ được xem xét trước khi các chuỗi được khai báo trong tệp WORKSPACE bằng register_toolchains().

--toolchain_resolution_debug=regex

In thông tin gỡ lỗi trong khi tìm chuỗi công cụ nếu loại chuỗi công cụ khớp với biểu thức chính quy. Có thể phân tách nhiều biểu thức chính quy bằng dấu phẩy. Bạn có thể phủ định biểu thức chính quy bằng cách sử dụng - ở đầu. Điều này có thể giúp nhà phát triển các quy tắc của Bazel hoặc Starlark gỡ lỗi do thiếu chuỗi công cụ.

Khác

--flag_alias=alias_name=target_path

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

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

Nếu không thể tạo đường liên kết tượng trưng vì bất kỳ lý do nào, cảnh báo sẽ được đưa ra nhưng bản dựng vẫn được coi là thành công. Cụ thể, thao tác này cho phép bạn tạo 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 thông tin ở cuối bản dựng sẽ chỉ sử dụng biểu mẫu ngắn tương đối 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 được tạo.

Một số giá trị chung của tuỳ chọn này:

  • Cải thiện khả năng tạo đường liên kết tượng trưng: --symlink_prefix=/ sẽ khiến Bazel không tạo hoặc cập nhật bất kỳ đường liên kết tượng trưng nào, bao gồm cả đường liên kết tượng trưng bazel-outbazel-<workspace>. Sử dụng tùy chọn này để chặn hoàn toàn việc tạo 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 (symlink) 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 tệp vào các thư mục khác nhau, ví dụ: để cải thiện tỷ lệ truy cập bộ nhớ đệm cho các bản dựng nếu không, sẽ chèn các tệp đầu ra khác 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 thử các thay đổi về chế độ hiển thị mặc định của bazel. Không nhằm mục đích sử dụng chung nhưng được ghi chép lại là đầy đủ.

--[no]use_action_cache

Tuỳ chọn này được bật theo mặc định. Nếu chế độ này tắt, Bazel sẽ không dùng bộ nhớ đệm cho thao tác trên máy. Việc tắt bộ nhớ đệm của hành động cục bộ sẽ tiết kiệm bộ nhớ và dung lượng ổ đĩa cho các bản dựng sạch, nhưng sẽ làm cho các bản dựng tăng dần chậm hơn.

--starlark_cpu_profile=_file_

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

Sử dụng tùy chọn này để giúp xác định các hàm Starlark khiến việc tải và phân tích bị 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

Để có nhiều chế độ xem dữ liệu giống nhau, hãy thử các lệnh pprof svg, weblist.

Dùng Bazel cho các bản phát hành

Bazel được các kỹ sư phần mềm sử dụng trong suốt giai đoạn phát triển và 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 các kỹ sư phát hành bằng Bazel.

Lựa chọn quan trọng

Khi sử dụng Bazel cho các bản phát hành, các vấn đề tương tự sẽ 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 cho Bazel từ tập lệnh. Cụ thể, bạn nên sử dụng các tuỳ chọn sau:

Những tuỳ chọn này cũng quan trọng:

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

Đang chạy kiểm thử

Để tạo và chạy kiểm thử bằng bazel, hãy nhập bazel test 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 tạo và kiểm thử đồng thời, xây dựng tất cả mục tiêu đã 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 tạo, có nghĩa là việc thực thi kiểm thử sẽ bị đan xen với việc xây dựng. Làm như vậy thường giúp bạn tăng tốc độ đáng kể.

Các lựa chọn dành cho bazel test

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

Nếu tuỳ chọn này được đặt thành "auto" (mặc định), thì Bazel sẽ chỉ chạy lại kiểm thử nếu trong 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ử
  • thử nghiệm được đánh dấu là external
  • bạn đã yêu cầu nhiều lần chạy thử nghiệm với --runs_per_test
  • kiểm thử không thành công.

Nếu "không", tất cả các thử nghiệm sẽ được thực thi vô điều kiện.

Nếu là "có", hành vi lưu vào bộ nhớ đệm sẽ giống như tự động, ngoại trừ việc có thể lưu các lỗi kiểm thử vào bộ nhớ đệm và chạy các kiểm thử 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 từ viết tắt -t (bật) hoặc -t- (tắt) thuận tiện để 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 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ỳ 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ụ: vì mã nguồn hoặc tuỳ chọn bản dựng đã thay đổi), thì Bazel sẽ báo cáo thông báo lỗi ("kết quả kiểm thử không cập nhật"), sẽ ghi lại trạng thái kiểm thử là "KHÔNG TRẠNG THÁI" (màu đỏ, nếu đầ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 kiểm thử dài hơn đáng kể so với thời gian thực thi của kiểm thử. Mặc dù thời gian chờ của bài kiểm thử nên được thiết lập sao cho không bị lỗi, nhưng bài kiểm thử có thời gian chờ quá cao có thể ẩn các vấn đề thực tế xảy ra đột ngột.

Ví dụ: thử nghiệm thường thực thi trong một hoặc hai phút không được có thời gian chờ của ETERNAL hoặc LONG vì chúng có thời gian chờ khá lớn.

Tùy chọn này hữu ích để giúp người dùng quyết định giá trị thời gian chờ thích 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 thử nghiệm sẽ chạy đến khi hoàn tất. Tuy nhiên, nếu cờ này bị tắt, bản dựng sẽ bị huỷ trong mọi quá trình kiểm thử không đạt. Các bước xây dựng tiếp theo và lệnh gọi thử không được chạy và lệnh gọi đang chạy 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 thử nghiệm tối đa cần thử nếu không thành công vì bất kỳ lý do gì. Thử nghiệm ban đầu không thành công nhưng cuối cùng vẫn thành công được báo cáo là FLAKY trên bản tóm tắt thử nghiệm. Tuy nhiên, chúng tôi sẽ coi đây là quy trình vượt qua khi xác định mã thoát của Bazel hoặc tổng số lần kiểm thử đã đạt. Các thử nghiệm không thành công tất cả các lần thử được phép đều được coi là không thành công.

Theo mặc định (khi tùy chọn này không được chỉ định hoặc khi được đặt thành mặc định), chỉ một lần thử được phép cho các lần kiểm thử thông thường và 3 lần cho các quy tắc kiểm thử với 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 số lần thử tối đa. Bazel cho phép tối đa 10 lần kiểm 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ượt kiểm thử được thực thi. Tất cả quá trình thực thi kiểm thử được xem là các kiểm thử riêng biệt (chức năng dự phòng sẽ áp dụng độc lập cho từng kiểm thử).

Trạng thái của mục tiêu không chạy được phụ thuộc vào giá trị của cờ --runs_per_test_detects_flakes:

  • Nếu không có cột này, bất kỳ lần chạy không thành công nào cũng sẽ khiến toàn bộ quá trình kiểm thử không đạt.
  • Nếu có và 2 lượt chạy từ cùng một phân đoạn trả về PASS và FAILED, thì kiểm thử sẽ nhận được trạng thái không ổn định (trừ khi các lượt chạy không thành công khác khiến quá trình này không thành công).

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

--[no]runs_per_test_detects_flakes

Nếu bạn chỉ định tùy chọn này (không mặc định), thì Bazel sẽ phát hiện các mảnh thử nghiệm không ổn định thông qua --runs_per_test. Nếu một hoặc nhiều lần chạy cho một phân đoạn 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 thành công.

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

--test_output=output_style

Chỉ định cách hiển thị kết quả kiểm thử:

  • summary cho thấy thông tin tóm tắt về việc mỗi lần kiểm thử đạt hay không. Đồng thời, hiển thị tên tệp nhật ký đầu ra của các lượt kiểm thử không thành công. Bản tóm tắt sẽ được in ở cuối bản dựng (trong quá trình tạo bản dựng, người dùng sẽ chỉ thấy các thông báo tiến trình đơn giản khi 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 vào stdout ngay sau khi kiểm thử hoàn tất, đảm bảo rằng đầu ra kiểm thử từ các kiểm thử đồng thời không bị xen kẽ với nhau. In một bản tóm tắt tại bản dựng theo kết quả tóm tắt ở trên.
  • all tương tự như errors nhưng xuất kết quả cho tất cả kiểm thử, bao gồm cả những kiểm thử đạt.
  • streamed phát trực tuyến đầu ra stdout/stderr từ mỗi lần kiểm thử trong 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 kiểm thử và các thông tin bổ sung khác (như lượt kiểm thử) được in ra phần tóm tắt kiểm thử. Nếu bạn chỉ định --noverbose_test_summary, bản tóm tắt thử nghiệm sẽ chỉ bao gồm tên thử nghiệm, trạng thái kiểm thử và chỉ báo kiểm thử được lưu vào bộ nhớ đệm, đồng thời sẽ được định dạng để duy trì trong phạm vi 80 ký tự khi có thể.

--test_tmpdir=path

Chỉ định thư mục tạm thời cho các thử nghiệm đượ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 vào đầu mỗi lệnh bazel test. Theo mặc định, bazel sẽ đặt thư mục này trong thư mục cơ sở đầu ra của Bazel.

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

Ghi đè giá trị thời gian chờ cho tất cả thử nghiệm bằng cách sử dụng số giây đã chỉ định làm giá trị thời gian chờ mới. Nếu chỉ 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 cho các lượt kiểm thử ngắn, trung bình, dài và vĩnh viễn (theo thứ tự đó). Ở dạng 0 hoặc 1 giá trị âm cho bất kỳ kích thước kiểm thử nào, hệ thống sẽ thay thế thời gian chờ mặc định cho các danh mục thời gian chờ nhất định theo quy định trong 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ả kiểm thử bằng cách suy ra giới hạn thời gian chờ từ kích thước của kiểm thử cho dù kích thước đó được đặt ngầm ẩn hay rõ ràng.

Các thử nghiệm nêu rõ danh mục thời gian chờ của chúng khác với kích thước sẽ nhận được cùng một giá trị như thể thẻ kích thước đã đặt giá trị thời gian chờ đó. Vì vậy, việc kiểm thử kích thước 'nhỏ' khai báo thời gian chờ 'dài' sẽ có thời gian chờ hiệu quả 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ố vào mỗi quy trình kiểm thử. Bạn có thể sử dụng tùy chọn này nhiều lần để truyề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 lượt kiểm thử. Nếu không được chỉ định, value 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 ngay 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 sẽ chỉ định một tiền tố mà trình chạy kiểm thử sẽ chèn vào trước lệnh kiểm thử trước khi chạy lệnh đó. command-prefix được chia thành các từ bằng cách sử dụng quy tắc mã hoá Bourne shell, sau đó danh sách các từ sẽ được thêm vào trước lệnh sẽ được thực thi.

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

Một số lưu ý:

  • PATH dùng để chạy các thử nghiệm có thể khác với PATH trong môi trường của bạn. Vì vậy, bạn có thể cần phải sử dụng đường dẫn tuyệt đối cho lệnh --run_under (từ đầu tiên trong command-prefix).
  • stdin chưa được kết nối, vì vậy bạn không thể sử dụng --run_under cho các lệnh tương tác.

Ví dụ:

        --run_under=/usr/bin/strace
        --run_under='/usr/bin/strace -c'
        --run_under=/usr/bin/valgrind
        --run_under='/usr/bin/valgrind --quiet --num-callers=20'

Chọn thử nghiệm

Như đã nêu trong phần Các tuỳ 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ể tới trình chạy kiểm thử.

Các lựa chọn khác cho bazel test

Cú pháp và các tùy chọn còn lại giống hệt như bazel build.

Chạy tệp thực thi

Lệnh bazel run tương tự như bazel build, ngoại trừ 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 họp thông thường:

  % 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 khác nhau tuỳ thuộc vào việc tệp nhị phân được gọi có phải là kiểm thử hay không.

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

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

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

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

Ví dụ: Bạn có thể sử dụng các thông tin 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.

Các lựa chọn dành cho bazel run

--run_under=command-prefix

Cách này có hiệu quả tương tự như tuỳ chọn --run_under cho bazel test (xem ở trên), ngoại trừ việc tuỳ chọn này áp dụng cho lệnh được chạy bằng bazel run thay vì kiểm thử do bazel test chạy và không thể chạy dưới 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. Để giảm nhật ký nhật ký, bạn có thể đẩy các kết quả từ 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ột kết quả gần đúng của môi trường được mô tả tại Kiểm thử viết. Lưu ý rằng không có đối số --test_* nào có hiệu lực khi chạy kiểm thử theo cách này, ngoại trừ --test_arg .

Làm sạch kết quả của bản dựng

Lệnh clean

Bazel có lệnh clean, tương tự như lệnh của Make. Thao tác này sẽ xoá các thư mục đầu ra cho tất cả cấu hình bản dựng do thực thể Bazel này thực hiện hoặc toàn bộ cây đang hoạt động do thực thể Bazel này tạo và đặt lại bộ nhớ đệm nội bộ. Nếu thực thi mà không có bất kỳ tùy chọn dòng lệnh nào, thì thư mục đầu ra cho tất cả cấu hình sẽ bị xóa.

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ả kết quả khỏi tất cả bản dựng mà bạn đã thực hiện bằng 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 thực thi bằng --expunge, lệnh dọn sạch chỉ đơn giản là xoá toàn bộ cây cơ sở đầu ra. Ngoài ra, còn có tất cả tệp tạm thời do Bazel tạo. Thao tác này cũng sẽ dừng máy chủ Bazel sau khi dọn sạch, tương đương với lệnh shutdown. Ví dụ: Để dọn dẹp tất cả dấu vết ổ đĩ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. Bạn có thể gọi lệnh Bazel trong cùng một ứng dụng trong khi tính năng dọn dẹp không đồng bộ tiếp tục chạy.

Lệnh clean được cung cấp chủ yếu như một phương tiện để 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. Các bản dựng lại của Bazel có thể không hoàn hảo, vì vậy, bạn có thể dùng clean để khôi phục trạng thái nhất quán khi có sự cố xảy ra.

Thiết kế của Bazel là để khắc phục các sự cố này và ưu tiên sửa các lỗi này. Nếu bạn tìm 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 sử dụng ngôn ngữ truy vấn để đặt câu hỏi về biểu đồ phần phụ thuộc được sử dụng trong quá trình xây dựng. Ngôn ngữ truy vấn được sử dụng trong hai lệnh: truy vấn và truy vấn. Sự khác biệt chính giữa hai lệnh là truy vấn đó 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 hỗ trợ rất nhiều cho nhiều nhiệm vụ kỹ thuật phần mềm.

Ngôn ngữ truy vấn dựa trên ý tưởng về hoạt động đại số trên biểu đồ; ngôn ngữ này được trình bày chi tiết trong

Tài liệu tham khảo về BigQuery. 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 (được tắt theo mặc định) khiến công cụ truy vấn tiếp tục tiến hành khi có lỗi; hành vi này có thể bị tắt nếu kết quả không đầy đủ không được chấp nhận trong trường hợp xảy ra lỗi.

Tùy 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 khiến các phần phụ thuộc ngầm ẩn được đưa vào biểu đồ phần phụ thuộc mà truy vấn hoạt động trên đó. Phần phụ thuộc ngầm định là 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ụ: "Hiển thị vị trí của các định nghĩa (trong tệp BUILD) của tất cả các quy tắc cần thiết để tạo tất cả các kiểm thử trong cây PEBL."

  bazel query --output location 'kind(genrule, deps(kind(".*_test rule", foo/bar/pebl/...)))'

Truy vấn biểu đồ hành động

Lệnh aquery cho phép bạn truy vấn các hành động trong biểu đồ bản dựng. Công cụ này hoạt động trên biểu đồ mục tiêu đã được định cấu hình sau khi phân tích và cho thấy thông tin về các hành động, cấu phần phần mềm và mối quan hệ của các hành động đó.

Công cụ này chấp nhận một số tùy chọn dòng lệnh. --output chọn định dạng đầu ra. Định dạng đầu ra mặc định (text) có thể đọc được, hãy sử dụng proto hoặc textproto để định dạng mà máy có thể đọc được. Đáng chú ý là lệnh truy vấn chạy trên bản dựng Bazel thông thường và kế thừa bộ tuỳ chọn có sẵn trong một bản dựng.

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

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

Các lệnh và tùy chọn khác

help

Lệnh help cung cấp trợ giúp trực tuyến. Theo mặc định, phần này hiển thị thông tin tóm tắt về các lệnh và chủ đề trợ giúp có sẵn, như thể hiện trong phần Xây dựng bằng Bazel. Việc chỉ định đối số sẽ hiển thị thông tin trợ giúp chi tiết cho một chủ đề cụ thể. Hầu hết các chủ đề đều là lệnh của Bazel, chẳng hạn như build hoặc query. Tuy nhiên, 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 cho một chủ đề. Nếu bạn chỉ định tùy chọn --long thì loại, giá trị mặc định và nội dung mô tả đầy đủ về từng tùy chọn cũng sẽ được in.

shutdown

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ủ không hoạt động (ví dụ: sau khi hoàn tất mọi 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, hãy 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 cho các tập lệnh khi biết rằng sẽ không có bản dựng nào khác xảy ra trong một không gian làm việc nhất định.

shutdown chấp nhận một tuỳ chọn, --iff_heap_size_greater_than _n_, yêu cầu đối số nguyên (tính bằng MB). Nếu được chỉ định, việc tắt này có điều kiện về dung lượng bộ nhớ đã tiêu thụ. Điều này hữu ích cho các tập lệnh khởi tạo nhiều bản dựng, vì bất kỳ sự cố rò rỉ bộ nhớ nào trong máy chủ Bazel đều có thể khiến nó gặp sự cố khi nhân dịp; việc thực hiện khởi động lại có điều kiện sẽ ngăn chặn điều kiện này.

info

Lệnh info in nhiều giá trị liên kết với thực thể máy chủ Bazel hoặc với một cấu hình bản dựng cụ thể. (Các tập lệnh dùng để tạo bản dựng có thể sử dụng các biến 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 tập lệnh Bazel, vì nó giúp tránh cần phải nhập 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 dành cho thực thể này của Bazel 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 bắt buộc nội bộ bên dưới thư mục này.

  • output_base: đường dẫn tuyệt đối đến thư mục đầu ra cơ sở mà thực thể Bazel này sử dụng cho tổ hợp người dùng và không gian làm việc hiện tại. Bazel đặt tất cả các mục đầu vào và tạo kết quả bên dưới thư mục này.

  • execution_root: đường dẫn tuyệt đối đến thư mục thực thi gốc trong output_base. Thư mục này là thư mục gốc của tất cả các tệp mà các lệnh có thể truy cập được thực thi trong bản dựng và là thư mục đang hoạt động cho các lệnh đó. Nếu thư mục không gian làm việc có thể ghi được, 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ả tệp thực sự được tạo từ các lệnh tạo bản dựng. Nếu thư mục không gian làm việc có thể ghi, 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 mục đích sử dụng của con người là của nhà phát triển Bazel và người dùng thành thạo.

  • command_log: đường dẫn tuyệt đối đến tệp nhật ký lệnh; đường dẫn này chứa các luồng stdout và stderr xen kẽ của lệnh Bazel gần đây nhất. Lưu ý rằng việc chạy bazel info sẽ ghi đè lên nội dung của tệp này vì sau đó sẽ trở thành lệnh Bazel gần đây nhất. Tuy nhiên, vị trí của tệp nhật ký lệnh sẽ không thay đổi trừ khi bạn thay đổi chế độ cài đặt của tuỳ chọn --output_base hoặc --output_user_root.

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

  • 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 bắt đầu và thời gian dành cho việc thu thập rác. Lưu ý: Các giá trị này không được đặt lại vào đầ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 để tìm kiếm các gói theo bazel. Có định dạng giống như đối số dòng lệnh bản dựng --package_path.

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

% bazel info server_pid
1285

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

Những dữ liệu này có thể bị ảnh hưởng bởi các tùy chọn cấu hình được truyền đến bazel info, ví dụ: --cpu, --compilation_mode, v.v. Lệnh info chấp nhận tất cả các tùy chọn kiểm soát bản phân tích phần phụ thuộc, vì một số tùy 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-*, trong đó có các chương trình do bản dựng tạo ra. Việc này thường không phải lúc nào cũ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 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ả định rằng sự tồn tại của đường liên kết tượng trưng sẽ mạnh mẽ hơn.
  • Môi trường "Make" đầy đủ. 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ẽ hiển thị (chẳng hạn như CC, GLIBC_VERSION, v.v.). Đây là các biến được truy cập bằng cú pháp $(CC) hoặc varref("CC") bên trong các 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 của cấu hình hiện tại. Điều này được đảm bảo chính xác ngay cả trong trường hợp không thể tạo đường liên kết tượng trưng bazel-bin vì lý do nào đó (chẳng hạn như khi bạn đang tạo từ thư mục chỉ đọc).

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

version--version

Lệnh 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 danh sách thay đổi được tạo và ngày tạo. Những thành phần này đặc biệt hữu ích trong việc xác định xem bạn có Bizel mới nhất hay đang báo cáo lỗi hay không. Có một số giá trị thú vị như sau:

  • changelist: danh sách thay đổi mà phiên bản Bazel này đã được phát hành.
  • label: nhãn phát hành dành cho thực thể này của Bazel 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 ra kết quả giống như bazel version --gnu_format, ngoại trừ việc không có tác dụng phụ của việc khởi động máy chủ Bazel hoặc giải nén kho lưu trữ máy chủ. Bạn có thể chạy bazel --version từ bất cứ đâu – không cần thư mục không gian làm việc.

mobile-install

Lệnh mobile-install cài đặt ứng dụng cho thiết bị di động. Hiện chỉ hỗ trợ các thiết bị Android chạy ART.

Xem phần cài đặt di động của Bazel để biết thêm thông tin.

Các tuỳ chọn sau được hỗ trợ:

--incremental

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

Nếu bạn đang sử dụng một thiết bị chạy Marshmallow trở lên, hãy xem xét cờ --split_apks.

--split_apks

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

--start_app

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

--debug_app

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

--start=_start_type_

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

  • NO không khởi động ứng dụng. Đây là tuỳ chọn 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 trên các lượt cài đặt gia tăng.
  • DEBUG Chờ trình gỡ lỗi trước khi khởi động ứng dụng ở trạng thái sạch sau khi cài đặt.

--adb=path

Cho biết tệp nhị phân adb sẽ được sử dụng.

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

--adb_arg=serial

Đối số bổ sung của adb. Các lệnh này xuất hiện trước lệnh con trong dòng lệnh và thường dùng để chỉ định thiết bị bạn muốn cài đặt. Ví dụ: để chọn thiết bị Android hoặc trình mô phỏng để sử dụng:

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

gọi adb

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 vào bảng điều khiển.

dump

Lệnh dump in ra một tệp báo lỗi về 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 với các tùy chọn có thể kết xuất để kết xuất các khu vực cụ thể của trạng thái Bazel. Để kết xuất trạng thái nội bộ, bạn phải chỉ định ít nhất một trong các 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 bộ nhớ đệm của hành động.
  • --packages kết xuất nội dung của 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 bản tóm tắt quy tắc cho từng lớp quy tắc và lớp khung hình, bao gồm cả số lượng và số lượng thao tác. Quy tắc này áp dụng cho cả quy tắc gốc và quy tắc Starlark. Nếu bạn bật tính năng theo dõi bộ nhớ, thì mức sử dụng bộ nhớ của các quy tắc cũng sẽ được in.
  • --skylark_memory kết xuất tệp .gz tương thích pprof vào đường dẫn được chỉ định. Bạn phải bật tính năng theo dõi bộ nhớ để tính năng này hoạt động.

Theo dõi bộ nhớ

Một số lệnh dump yêu cầu theo dõi bộ nhớ. Để bật tính năng này, bạn phải truyền cờ khởi động 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 thành Bazel tại third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar, vì vậy, hãy nhớ điều chỉnh $BAZEL để lưu trữ 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 dữ liệu đã thu thập trước đó trong bản dựng bằng cách sử dụng tuỳ chọn --profile. API này cung cấp một số tuỳ chọn để thực hiện việc phân tích quá trình thực thi bản dựng hoặc xuất dữ liệu ở định dạng được chỉ định.

Các tuỳ chọn sau được hỗ trợ:

  • --dump hiển thị tất cả dữ liệu được thu thập ở định dạng mà con người có thể đọc được. Tuy nhiên, thẻ này chưa hỗ trợ các định dạng khác.

Để biết thông tin chi tiết về định dạng và trợ giúp sử dụng, hãy xem phần Khắc phục sự cố về hiệu suất bằng cách phân tích tài nguyên.

canonicalize-flags

Lệnh canonicalize-flags sử dụng danh sách các tuỳ chọn cho một lệnh Bazel và trả về danh sách các tuỳ chọn có tác dụng tương tự. Danh sách mới gồm các tùy chọn là trang chính tắc. Ví dụ: hai danh sách tuỳ chọn có cùng hiệu ứng được chuẩn hoá thành cùng một danh sách mới.

Bạn có thể sử dụng tuỳ chọn --for_command để chọn giữa nhiều lệnh. Tại thời điểm này, chỉ có buildtest được hỗ trợ. Các tùy chọn mà lệnh đã cho không hỗ trợ gây ra lỗi.

Ví dụ:

  % bazel canonicalize-flags -- --config=any_name --test_tag_filters="-lint"
  --config=any_name
  --test_tag_filters=-lint

Tùy 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 máy ảo Java mà quy trình máy chủ Bazel sử dụng và các tùy chọn này cũng áp dụng cho tất cả các lệnh sau đó do máy chủ đó xử lý. Nếu có một máy chủ Bazel đang chạy và các tuỳ chọn khởi động không khớp, thì máy chủ đó sẽ được khởi động lại.

Bạn phải chỉ định tất cả các tùy 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 tùy 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 biến 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ả kết quả. Cơ sở đầu ra cũng là khoá dùng để định vị máy khách của máy chủ Bazel. Bằng cách thay đổi cơ sở đầu ra, bạn thay đổi máy chủ sẽ xử lý lệnh.

Theo mặc định, cơ sở dữ liệu đầu ra được bắt nguồn 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à thông báo MD5) nên có một giá trị thông thườ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; của shell), mỗi lệnh sử dụng một phiên bản máy chủ Bazel khác nhau (do có các 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ẽ tuần tự xử lý: tạo //foo trước, sau đó đến bản dựng tăng dần //bar.

--output_user_root=dir

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

Nếu bạn chỉ định tùy chọn --output_base, tùy 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ủa lượt 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 được nhúng của Bazel.

Bạn có thể sử dụng tùy chọn --output_user_root để chọn một vị trí cơ sở thay thế cho tất cả đầu ra của Bazel (cơ sở cài đặt và cơ sở đầu ra) nếu có 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à một đường dẫn đến thư mục chứa JDK hoặc JRE. Không được là nhãn. Tùy chọn này phải xuất hiện trước bất kỳ lệnh Bazel nào, ví dụ:

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

Cờ này không ảnh hưởng đến JVM do các quy trình phụ của Bazel sử dụng, chẳng hạn như ứng dụng, kiểm thử, công cụ, v.v. Thay vào đó, hãy 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 gọi là "bên trái" --host_javabase), nhưng đã được đổi tên để tránh nhầm lẫn với cờ xây dựng --host_javabase (đôi khi gọi là --host_javabasebên phải").

--host_jvm_args=string

Chỉ định một tùy chọn khởi động được chuyển đến máy ảo Java, trong đó chính Bazel sẽ chạy. Bạn có thể sử dụng kích thước 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 từng đối số. Lưu ý rằng việc đặt cờ này sẽ không cần thiết. Bạn cũng có thể truyền một danh sách các chuỗi được phân tách bằng dấu cách, mỗi chuỗi sẽ được diễn giải là một đối số VM riêng, nhưng tính năng này sẽ sớm không còn được dùng nữa.

Điều này không ảnh hưởng đến bất kỳ máy ảo nào mà các quy trình phụ của Bazel sử dụng: ứng dụng, thử nghiệm, công cụ, v.v. Để chuyển các tuỳ chọn JVM sang các chương trình Java thực thi, dù chạy bằng bazel run hay trên dòng lệnh, bạn nên sử dụng đối số --jvm_flags mà tất cả chương trình java_binaryjava_test đều hỗ trợ. Ngoài ra, để kiểm thử, hãy sử dụng bazel test --test_arg=--jvm_flags=foo ....

--host_jvm_debug

Tuỳ chọn này khiến máy ảo Java chờ kết nối từ trình gỡ lỗi tuân thủ JDWP trước khi gọi phương thức chính của Bazel. Chức năng này chủ yếu là 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 không có JRE được nhúng. Bạn có thể sử dụng --explicit_server_javabase để chọn JRE rõ ràng để chạy Bazel.

--batch

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

Chế độ hàng loạt giữ lại ngữ nghĩa thích hợp trong hàng đợi trong cùng một input_base. Điều này có nghĩa là các lệnh gọi đồng thời sẽ được xử lý theo thứ tự mà không bị chồng chéo. Nếu Bazel ở chế độ hàng loạt được chạy trên một ứng dụng có máy chủ đang chạy, thì trước tiên, chế độ này sẽ tắt máy chủ trước khi xử lý lệnh.

Bazel sẽ chạy chậm hơn ở chế độ hàng loạt hoặc với các lựa chọn thay thế được mô tả ở trên. Lý do là với bộ nhớ đệm của tệp bản dựng, bộ nhớ đệm là bộ nhớ thường trú, vì vậy bộ nhớ đệm không được đặt trước giữa các lệnh gọi hàng loạt theo 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

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

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

--[no]shutdown_on_low_sys_mem

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

Ngoài việc chạy quy trình kiểm tra trạng thái không hoạt động 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 hiện có sau khi máy chủ không hoạt động trong một khoảng thời gian. Nếu bộ nhớ hệ thống còn trống đến mức thấp, máy chủ sẽ thoát.

--[no]block_for_lock

Nếu bật, Bazel sẽ đợi các lệnh Bazel khác giữ khoá máy chủ hoàn tất trước khi tiếp tục. Nếu bị tắt, Bazel sẽ thoát ra do lỗi nếu không thể lấy được 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 mức từ 0 đến 7 để lập lịch IO với nỗ lực tối đa. 0 là mức ưu tiên cao nhất, 7 là thấp nhất. Trình lập lịch biểu 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ập lịch CPU batch cho Bazel. Chính sách này hữu ích đối với các khối lượng công việc không có tính tương tác nhưng không muốn hạ thấp giá trị tuyệt vời của chúng. Xem trang "man 2 sched_setscheduler". Chính sách này có thể mang lại khả năng tương tác tốt hơn với hệ thống nhưng đổi lại sẽ làm giảm công suất của Bazel.

Các 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 để làm nổi bật đầu ra của màn hình trên màn hình hay không.

Nếu bạn đặt tùy chọn này là yes, thì tính năng xuất màu sẽ được bật. Nếu bạn đặt tùy chọn này thành auto, Bazel sẽ chỉ sử dụng đầu ra màu nếu đầu ra đang được gửi đến thiết bị đầu cuối và biến môi trường TERM được đặt thành một giá trị không phải là dumb, emacs hoặc xterm-mono. Nếu bạn đặt tùy chọn này thành no, đầu ra màu sẽ bị tắt, bất kể đầu ra có được chuyển tới thiết bị đầu cuối và bất kể chế độ cài đặt của biến môi trường TERM hay không.

--config=name

Chọn thêm phần cấu hình 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 có một phần như vậy. Có thể được chỉ định nhiều lần để thêm cờ từ nhiều phần cấu hình. Các lần mở rộng có thể tham khảo các định nghĩa khác (ví dụ: các lần mở rộng có thể được xâu chuỗi).

--curses (yes|no|auto)

Tuỳ chọn này xác định xem Bazel có sử dụng các tuỳ chọn điều khiển con trỏ trong đầu ra màn hình hay không. Điều này dẫn đến việc dữ liệu cuộn ít hơn và luồng đầu ra từ Bazel nhỏ gọn, dễ đọc hơn. Tính năng này hoạt động hiệu quả với --color.

Nếu bạn đặt tùy chọn này thành yes, thì quyề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, thì việc sử dụng các nút điều khiển con trỏ sẽ bị tắt. Nếu bạn đặt tuỳ chọn này là auto, thì việc sử dụng các tuỳ chọn đ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 doBazel tạo, trong đó chỉ định thời gian hiển thị thông báo.