Lệnh và tuỳ chọn

Báo cáo sự cố Xem nguồn

Trang này trình bày các tuỳ chọn có sẵn với các lệnh Bazel khác nhau, 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 một danh sách mục tiêu. Các đối tượng này sử dụng cú pháp linh hoạt hơn nhãn, được ghi lại trong phần Chỉ định mục tiêu để xây dựng.

Tùy chọn

Các phần sau đây mô tả các tuỳ chọn có sẵn trong một bản dựng. Khi --long được sử dụng trên một lệnh trợ giúp, các thông báo trợ giúp trực tuyến sẽ cung cấp thông tin tóm tắt về ý nghĩa, loại và giá trị mặc định của mỗi tuỳ chọn.

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

Vị trí gói hàng

--package_path

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

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

Cách 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

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

  1. Nếu ký tự đầu tiên là /, đường dẫn là tuyệt đối.
  2. Nếu đường dẫn bắt đầu bằng %workspace%, đường dẫn đó sẽ được đưa đến thư mục bazel bao quanh gần nhất. Ví dụ: nếu thư mục đang hoạt động của bạn là /home/bob/clients/bob_client/bazel/foo, thì chuỗi %workspace% trong đường dẫn gói sẽ được mở rộng thành /home/bob/clients/bob_client/bazel.
  3. Mọi hoạt động khác sẽ đượ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 . và sau đó cd vào thư mục /home/bob/clients/bob_client/bazel/foo, thì các gói sẽ được phân giải từ thư mục /home/bob/clients/bob_client/bazel/foo.

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

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

Ví dụ: Tạo bản 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 một danh sách được phân tách bằng dấu phẩy các gói mà Bazel sẽ coi là đã xoá và không tìm cách tải từ bất kỳ thư mục nào trên đường dẫn gói. Bạn có thể dùng tính năng này để mô phỏng quá trình xoá các gói mà không thực sự xoá chúng. Tuỳ chọn này có thể được truyền nhiều lần, trong trường hợp đó, các danh sách riêng lẻ sẽ được nối với nhau.

Kiểm tra lỗi

Các tuỳ chọn này kiểm soát việc kiểm tra lỗi và/hoặc cảnh báo của Bazel.

--[no]check_visibility

Nếu bạn đặt tuỳ chọn này thành false, thì hoạt độ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 để kiểm tra chế độ hiển thị theo mặc định.

--output_filter=regex

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

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

`--output_filter='^//(first/project|second/project):'` Cho thấy kết quả của các gói đã chỉ định.
`--output_filter='^//((?!(first/bad_project|second/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_ANYTHING` Không hiển thị nội dung nào.

Cờ công cụ

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

--copt=cc-option

Tuỳ chọn này nhận một đối số sẽ được truyền đến trình biên dịch. Đối số sẽ được chuyển đến trình biên dịch bất cứ khi nào được gọi để xử lý trước, biên dịch và/hoặc tập hợp mã C, C++ hoặc trình kết hợp. Mã này sẽ không được truyền khi liên kết.

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

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

sẽ biên dịch thư viện foo mà không cần bảng gỡ lỗi, tạo mã không phụ thuộc vào vị trí.

--host_copt=cc-option

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

--host_conlyopt=cc-option

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

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

--host_linkopt=linker-option

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

--conlyopt=cc-option

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

Phương thức này tương tự như --copt, nhưng chỉ áp dụng cho quá trình biên dịch C, không áp dụng cho việc 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 cách sử dụng --conlyopt.

--cxxopt=cc-option

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

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

Ví dụ:

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

--linkopt=linker-option

Tuỳ chọn này nhận một đối số sẽ được chuyển đến trình biên dịch khi liên kết.

Thuộc tính này tương tự như --copt, nhưng chỉ áp dụng cho việc liên kết chứ không áp dụng cho quá trình biên dịch. Vì vậy, bạn có thể chuyển các tuỳ chọn của trình biên dịch chỉ có ý nghĩa tại thời điểm liên kết (chẳng hạn như -lssp hoặc -Wl,--wrap,abort) bằng cách sử dụng --linkopt. Ví dụ:

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

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

--strip (always|never|sometimes)

Tuỳ chọn này xác định xem Bazel có xoá thông tin gỡ lỗi khỏi mọi tệp nhị phân và thư viện chia sẻ hay không bằng cách gọi trình liên kết với tuỳ chọn -Wl,--strip-debug. --strip=always có nghĩa là luôn xoá thông tin gỡ lỗi. --strip=never có nghĩa là tuyệt đối không xoá thông tin gỡ lỗi. Giá trị mặc định của --strip=sometimes có nghĩa là loại bỏ 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 mọi 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 muốn xoá tất cả các ký hiệu, chứ không chỉ các biểu tượng gỡ lỗi, bạn cần sử dụng tuỳ chọn --strip-all của ld. Bạn có thể thực hiện việc này bằng cách truyền --linkopt=-Wl,--strip-all cho Bazel. Ngoài ra, hãy lưu ý rằng việc đặt cờ --strip của Bazel sẽ ghi đè --linkopt=-Wl,--strip-all, vì vậy, bạn chỉ nên đặt một trong hai cờ này.

Nếu chỉ đang tạo một tệp nhị phân và muốn xoá tất cả các biểu tượng, bạn cũng có thể truyền --stripopt=--strip-all và tạo phiên bản //foo:bar.stripped của mục tiêu một cách rõ ràng. Như mô tả trong phần trên --stripopt, thao tác này áp dụng thao tác xoá sau khi tệp nhị phân cuối cùng được liên kết thay vì bao gồm thao tác xoá trong mọi 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 đến lệnh strip khi tạo tệp nhị phân *.stripped. Giá trị mặc định là -S -p. Bạn có thể sử dụng lựa chọn này nhiều lần.

--fdo_instrument=profile-output-dir

Tuỳ chọn --fdo_instrument cho phép tạo đầu ra hồ sơ FDO (tối ưu hoá theo hướng phản hồi) khi tệp nhị phân C/C++ đã tạo được thực thi. Đối với GCC, đối số đã cung cấp được dùng làm tiền tố thư mục cho cây thư mục tệp cho mỗi đối tượng của các tệp .gcda chứa thông tin hồ sơ cho mỗi tệp .o.

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

Đối với trình biên dịch LLVM, đối số cũng là thư mục mà trong đó(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 các tuỳ chọn --fdo_instrument--fdo_optimize cùng lúc.

--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 để tối ưu hoá FDO (tối ưu hoá theo hướng phản hồi) khi biên dịch. Đối với GCC, đối số được cung cấp là tệp zip chứa cây tệp được tạo trước đó của các tệp .gcda chứa thông tin hồ sơ 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 hồ sơ LLVM đã lập chỉ mục do công cụ llvm-profdata chuẩn bị và phải có phần mở rộng .profdata.

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

--java_language_version=version

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

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

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

--tool_java_language_version=version

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

--java_runtime_version=version

Tuỳ chọn này chỉ định phiên bản JVM cần sử dụng để thực thi mã và chạy kiểm thử. Ví dụ:

  % bazel run --java_runtime_version=remotejdk_11 java/com/example/common/foo:java_application

tải JDK 11 xuống qua kho lưu trữ từ xa và chạy ứng dụng Java bằng kho lưu trữ đó.

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

--tool_java_runtime_version=version

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

--jvmopt=jvm-option

Lựa chọn này cho phép truyền các đối số tuỳ chọn đến máy ảo Java. Bạn có thể sử dụng đối số này với một đối số lớn hoặc nhiều lần với các đối số riêng lẻ. Ví dụ:

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

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

--javacopt=javac-option

Tuỳ chọn này cho phép truyền các đối số tuỳ chọn đến javac. Bạn có thể sử dụng đối số này với một đối số lớn hoặc nhiều lần với các đối số riêng lẻ. Ví dụ:

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

sẽ xây dựng lại một java_binary với thông tin gỡ lỗi mặc định javac (thay vì giá trị mặc định bazel).

Tuỳ chọn này được chuyển đến javac sau các tuỳ chọn mặc định tích hợp Bazel dành cho javac và trước các tuỳ chọn trên mỗi quy tắc. Thông số kỹ thuật cuối cùng của mọi tuỳ chọn để javac thắng. Các tuỳ chọn mặc định cho javac là:

  -source 8 -target 8 -encoding UTF-8

--strict_java_deps (default|strict|off|warn|error)

Tuỳ chọn này kiểm soát việc javac có kiểm tra xem có phần phụ thuộc trực tiếp bị thiếu hay không. Các mục tiêu Java phải khai báo rõ ràng tất cả mục tiêu được 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 của từng tệp java và cảnh báo/lỗi nếu các tệp đó không phải là kết quả của phần phụ thuộc trực tiếp của mục tiêu hiện tại.

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

Xây dựng ngữ nghĩa

Những tuỳ 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) lấy đố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 bảng gỡ lỗi. Bazel sử dụng thư mục đầu ra riêng cho từng chế độ biên dịch để 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 lần.

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

--cpu=cpu

Tuỳ chọn này chỉ định cấu trúc CPU mục tiêu sẽ được dùng để biên dịch tệp nhị phân trong quá trình tạo bản dựng.

--action_env=VAR=VALUE

Chỉ định tập hợp các biến môi trường có sẵn trong quá trình thực thi tất cả các hành động. Các 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 giúp thiết lập 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ượt chỉ định mới nhất sẽ chiến thắng.

--experimental_action_listener=label

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

--[no]experimental_extra_action_top_level_only

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

--experimental_extra_action_filter=regex

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

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

Theo mặc định, tất cả extra_actions trong quá trình đóng bắc cầu của các mục tiêu được yêu cầu để tạo bản dựng đều được lên lịch thực thi. --experimental_extra_action_filter sẽ hạn chế việc lên lịch ở extra_actions, trong đó nhãn của chủ sở hữu khớp với biểu thức chính quy đã chỉ định.

Ví dụ sau đây sẽ giới hạn việc lập lịch biểu của extra_actions để chỉ áp dụng cho các thao tác có 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 nên được sử dụng để xây dựng công cụ lưu trữ.

--android_platforms=platform[,platform]*

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

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

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

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

Nếu có, mọi tệp C++ có nhãn hoặc đường dẫn thực thi khớp với một trong các biểu thức chính quy cần đưa vào và không khớp với bất kỳ biểu thức loại trừ nào sẽ được tạo bằng các tuỳ chọn cho trước. Việc so khớp nhãn sẽ sử dụng dạng chính tắc của nhãn (ví dụ: //package:label_name).

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

Để so khớp các tệp đã tạo (chẳng hạn như dữ liệu đầu ra của quy tắc gen), Bazel chỉ có thể sử dụng đường dẫn thực thi. Trong trường hợp này, biểu thức chính quy không nên bắt đầu bằng "//" vì điều đó không khớp với bất kỳ đường dẫn thực thi nào. Bạn có thể sử dụng tên gói như sau: --per_file_copt=base/.*\.pb\.cc@-g0. Thao tác này sẽ so khớp với mọi tệp .pb.cc trong một thư mục có tên là base.

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

Tuỳ chọn này được áp dụng bất kể chế độ biên dịch được sử dụng là gì. Ví dụ: bạn có thể biên dịch bằng --compilation_mode=opt và biên dịch chọn lọc một số tệp khi bật tính năng tối ưu hoá mạnh hơn hoặc khi tắt tính năng tối ưu hoá.

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

Cú pháp: [+-]regex[,[+-]regex]...@option[,option]... Trong đó regex là viết tắt của một biểu thức chính quy có thể thêm tiền tố + để xác định mẫu bao gồm và - để xác định mẫu loại trừ. option là viết tắt của một tuỳ chọn tuỳ ý được truyền đến trình biên dịch C++. Nếu một tuỳ chọn chứa ,, thì nó phải được trích dẫn như vậy \,. Các tuỳ chọn cũng có thể chứa @, vì chỉ @ đầu tiên được dùng để phân tách biểu thức chính quy khỏi các tuỳ chọn.

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

--dynamic_mode=mode

Xác định xem tệp nhị phân C++ có được liên kết động hay không, tương tác với thuộc tính liên kết tĩnh trên các quy tắc bản dựng.

Chế độ:

  • auto: Chuyển sang chế độ phụ thuộc vào nền tảng; default cho linux và off cho cygwin.
  • default: Cho phép bazel chọn có liên kết động hay không. Hãy xem bài viết linkstatic để biết thêm thông tin.
  • fully: Liên kết tất cả mục tiêu một cách linh động. Việc này sẽ đẩy nhanh thời gian liên kết và giảm kích thước của các tệp nhị phân thu được.
  • off: Liên kết tất cả các mục tiêu ở chế độ chủ yếu là tĩnh. Nếu bạn đặt -static trong linkopts, thì các mục tiêu sẽ thay đổi thành hoàn toàn tĩnh.

--fission (yes|no|[dbg][,opt][,fastbuild])

Bật Fission để ghi thông tin gỡ lỗi C++ vào các tệp .dwo chuyên dụng thay vì tệp .o. Nếu không, tính năng này sẽ giúp giảm đáng kể kích thước dữ liệu đầu vào cho các đường liên kết và có thể giảm thời gian liên kết.

Khi bạn đặt thành [dbg][,opt][,fastbuild] (ví dụ: --fission=dbg,fastbuild), Fission chỉ được bật cho nhóm chế độ biên dịch đã chỉ định. Điều này rất hữu ích cho các chế độ cài đặt bazelrc. Khi đặt thành yes, tính năng Fission sẽ được bật trên toàn cầu. Khi đặt thành no, Fission sẽ bị tắt trên toàn cầu. Mặc định là no.

--force_ignore_dash_static

Nếu bạn đặt cờ này, thì mọi tuỳ chọn -static trong linkopts của tệp BUILD theo quy tắc cc_* sẽ bị bỏ qua. Đây chỉ là giải pháp cho các bản dựng tăng cường C++.

--[no]force_pic

Nếu được bật, mọi quá trình biên dịch C++ sẽ tạo mã độc lập 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, đồng thời các đường liên kết sẽ tạo ra các tệp thực thi độc lập vị trí ("-pie"). Chế độ mặc định là tắt.

--android_resource_shrinking

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

--custom_malloc=malloc-library-target

Khi chỉ định, hãy luôn sử dụng phương thức triển khai Malloc nhất định, ghi đè mọi thuộc tính malloc="target", bao gồm cả trong các mục tiêu sử dụng giá trị mặc định (bằng cách không chỉ định bất kỳ malloc nào).

--crosstool_top=label

Tuỳ chọn này chỉ định vị trí của bộ biên dịch đa công cụ cần dùng cho tất cả quá trình biên dịch C++ trong một bản dựng. Bazel sẽ tìm một tệp CROSSTOOL trong vị trí đó và dùng tệp đó để tự động xác định các chế độ cài đặt cho --compiler.

--host_crosstool_top=label

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

--apple_crosstool_top=label

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

--android_crosstool_top=label

Công cụ chéo dùng để biên dịch các quy tắc C/C++ trong deps bắc cầu của các quy tắc android_binary. Việc 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. Lựa chọn mặc định là sử dụng công cụ đa năng được tạo bằng quy tắc android_ndk_repository trong tệp WORKSPACE. Xem thêm --android_platforms.

--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 tệp nhị phân trong quá trình tạo bản dựng. Nếu muốn xây dựng bằng một công cụ chéo tuỳ chỉnh, bạn nên sử dụng tệp CROSSTOOL thay vì chỉ định cờ này.

--android_sdk=label

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

Tuỳ chọn này chỉ định chuỗi công cụ SDK/nền tảng Android và thư viện thời gian chạy Android sẽ 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 dùng để biên dịch tệp nguồn Java.

--host_java_toolchain=label

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

--javabase=(label)

Tuỳ chọn này đặt nhãn cài đặt Java cơ sở để sử dụng cho chạy chương trình bazel, kiểm thử bazel và cho các tệp nhị phân Java do các quy tắc java_binaryjava_test tạo. Biến"Make" JAVABASEJAVA được bắt nguồn từ lựa chọn này.

--host_javabase=label

Tuỳ chọn này đặt nhãn cài đặt Java cơ sở để dùng trong cấu hình thực thi, chẳng hạn như cho các công cụ xây dựng máy chủ lưu trữ 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 các 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 chế độ này không ảnh hưởng đáng kể đến các tệp đầu ra do bản dựng tạo. Thông thường, tác động chính của chúng là đối với tốc độ 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 làm cho 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 yêu cầu tất cả các tệp đầu vào, phần phụ thuộc dữ liệu và 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 hộp cát cục bộ trên các hệ thống hỗ trợ chế độ thực thi hộp cát.
  • local làm cho các lệnh được thực thi dưới dạng quy trình phụ cục bộ.
  • worker yêu cầu thực thi các lệnh bằng một worker liên tục (nếu có).
  • docker khiến các lệnh được thực thi bên trong hộp cát Docker trên máy cục bộ. Điều này đòi hỏi bạn phải cài đặt Docker.
  • remote khiến các lệnh được thực thi từ xa; điều này chỉ có sẵn nếu một trình thực thi từ xa đã được định cấu hình riêng.

--strategy mnemonic=strategy

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

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

Tuỳ chọn này chỉ định chiến lược nào sẽ được dùng để thực thi các lệnh có phần mô tả khớp với một regex_filter nhất định. Vui lòng xem --per_file_copt để biết thông tin chi tiết về việc so khớp regex_filter. Hãy xem --spawn_strategy để biết các chiến lược được hỗ trợ và hiệu ứng của chúng.

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

  • Ví dụ: --strategy_regexp=//foo.*\\.cc,-//foo/bar=local có nghĩa là chạy các hành động bằng chiến lược local nếu nội dung mô tả của các hành động đó khớp với //foo.*.cc chứ không phải //foo/bar.
  • Ví dụ: --strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed chạy "Compiling //foo/bar/baz" bằng chiến lược sandboxed, nhưng đảo ngược thứ tự sẽ chạy chiến lược đó bằng local.
  • Ví dụ: --strategy_regexp='Compiling.*/bar=local,sandboxed' chạy "Biên dịch //foo/bar/baz" bằng chiến lược local và quay lại sử dụng sandboxed nếu không thành công.

--genrule_strategy=strategy

Đây là cú pháp viết tắt không dùng nữa cho --strategy=Genrule=strategy.

--jobs=n (-j)

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

--progress_report_interval=n

Bazel định kỳ in báo cáo tiến trình cho các công việc chưa hoàn tất (chẳng hạn như các chương trình kiểm thử chạy trong thời gian dài). Tuỳ chọn này 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, điều đó có nghĩa là thuật toán gia tăng: báo cáo đầu tiên sẽ được in sau 10 giây, sau đó là 30 giây và sau đó, tiến trình đó sẽ được báo cáo mỗi phút một lần.

Khi bazel đang sử dụng chế độ điều khiển con trỏ, như được chỉ định bởi --curses, tiến trình sẽ được báo cáo mỗi giây.

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

Các tuỳ chọn này chỉ định lượng tài nguyên cục bộ (RAM tính bằng MB và số lượng lõi logic CPU) mà Bazel có thể xem xét khi lên lịch các hoạt động tạo và kiểm thử để chạy trên máy. Các biểu tượng này có thể lấy một số nguyên hoặc từ khoá (HOST_RAM hoặc HOST_CPUS) không bắt buộc theo sau là [-|*float] (ví dụ: --local_cpu_resources=2, --local_ram_resources=HOST_RAM*.5, --local_cpu_resources=HOST_CPUS-1). Các cờ là độc lập; có thể đặt một hoặc cả hai. Theo mặc định, Bazel ước tính dung lượng RAM và số lõi CPU ngay trên cấu hình của hệ thống cục bộ.

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

Khi kiểm thử (hoặc ứng dụng) được thực thi, các phần phụ thuộc của dữ liệu thời gian chạy sẽ được tập hợp ở cùng một nơi. Trong cây đầu ra của Bazel, cây "runfiles" này thường bị can thiệp vào hệ thống ở dạng đồng cấp của tệp nhị phân hoặc kiểm thử tương ứng. Trong phiên chạy kiểm thử, bạn có thể truy cập các tệp chạy bằng đường dẫn có dạng $TEST_SRCDIR/workspace/packagename/filename. Cây runfiles đảm bảo các bài kiểm thử có quyền truy cập vào tất cả các tệp mà các tệp đó phụ thuộc đã khai báo chứ không có gì khác. Theo mặc định, cây runfiles được triển khai bằng cách tạo một tập hợp các đường liên kết tượng trưng đến các tệp bắt buộc. Khi tập hợp các đường liên kết tăng lên, chi phí của thao tác này cũng tăng lên và đối với một số bản dựng lớn, nó có thể đóng góp đáng kể vào tổng thời gian xây dựng, cụ thể là vì mỗi bài kiểm thử (hoặc ứng dụng) riêng lẻ yêu cầu cây runfile riêng.

--[no]build_runfile_manifests

Tuỳ chọn này được bật theo mặc định, chỉ định xem các tệp kê khai runfile có được ghi vào cây đầu ra hay không. Việc tắt chế độ này 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 runfiles sẽ được tạo từ xa từ các tệp kê khai trong bộ nhớ.

--[no]discard_analysis_cache

Khi bật tuỳ chọn này, Bazel sẽ loại bỏ bộ nhớ đệm phân tích ngay trước khi bắt đầu thực thi, qua đó giải phóng thêm bộ nhớ (khoảng 10%) cho giai đoạn thực thi. Hạn chế là các bản dựng 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 cố gắng xây dựng nhiều nhất có thể ngay cả khi gặp lỗi sẽ rất hữu ích. Tuỳ chọn này cho phép hành vi đó và khi hành vi đượ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.

Tuy tuỳ chọn này thường liên kết với giai đoạn thực thi của một bản dựng, nhưng cũng ảnh hưởng đến giai đoạn phân tích: nếu nhiều mục tiêu được chỉ định trong một lệnh bản dựng, nhưng chỉ một số mục tiêu trong số đó có thể được phân tích thành công, thì bản dựng sẽ dừng với lỗi trừ phi --keep_going được chỉ định. Trong trường hợp đó, bản dựng sẽ tiếp tục giai đoạn thực thi, nhưng chỉ đối với các mục tiêu đã được phân tích thành công.

--[no]use_ijars

Tuỳ chọn này thay đổi cách Bazel biên dịch các mục tiêu của java_library. Thay vì sử dụng kết quả của một java_library để biên dịch các mục tiêu java_library phụ thuộc, Bazel sẽ tạo các tệp jar giao diện chỉ chứa chữ ký của các thành phần không riêng tư (các trường và phương thức truy cập công khai, được bảo vệ và mặc định (gói)), đồng thời sử dụng các tệp 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 các thay đổi chỉ được thực hiện đối với phần nội dung phương thức hoặc thành phần riêng tư của một lớp.

--[no]interface_shared_objects

Tuỳ chọn này bật giao diện đối tượng dùng chung. Điều này khiến tệp nhị phân và các thư viện dùng chung khác phụ thuộc vào giao diện của đối tượng dùng chung, thay vì cách triển khai. Khi chỉ thay đổi cách triển khai, Bazel có thể tránh tạo lại các mục tiêu phụ thuộc vào thư viện chia sẻ đã 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 tạo hoặc kiểm thử.

--[no]build

Tuỳ chọn này khiến giai đoạn thực thi của bản dựng xảy ra; ở trạng thái bật theo mặc định. Khi 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 xảy ra.

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 thực sự tạo bất kỳ thứ gì.

--[no]build_tests_only

Nếu được chỉ định, Bazel sẽ chỉ tạo những nội dung cần thiết để chạy các quy tắc *_testtest_suite không được lọc theo kích thước, thời gian chờ, thẻ hoặc ngôn ngữ. Nếu bạn chỉ định, Bazel sẽ bỏ qua các mục tiêu khác được chỉ định trên dòng lệnh. Theo mặc định, tuỳ chọn này bị tắt và Bazel sẽ tạo mọi thứ được yêu cầu, bao gồm cả các quy tắc *_testtest_suite được lọc ra khỏi hoạt động kiểm thử. Điều này rất hữu ích vì việc chạy bazel test --build_tests_only foo/... có thể không phát hiện được mọi lỗi bản dựng trong cây foo.

--[no]check_up_to_date

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

Xem thêm --check_tests_up_to_date.

--[no]compile_one_dependency

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

--save_temps

Tuỳ chọn --save_temps khiến các kết quả tạm thời từ trình biên dịch được lưu. Những tệp này bao gồm các tệp .s (mã tập hợp), .i (C đã xử lý trước) và .ii (C++ đã xử lý trước). Những kết quả này thường hữu ích khi gỡ lỗi. Tạm thời 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 đối với các quy tắc cc_*.

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

--build_tag_filters=tag[,tag]*

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

Khi chạy kiểm thử, Bazel bỏ qua --build_tag_filters cho các mục tiêu kiểm thử. Các mục tiêu này được tạo và chạy ngay cả khi chúng 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 mục tiêu kiểm thử bằng cách sử dụng --test_tag_filters hoặc loại trừ các mục tiêu đó một cách rõ ràng.

--test_size_filters=size[,size]*

Nếu được chỉ định, Bazel sẽ 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 đã cho. Bộ lọc kích thước thử nghiệm được chỉ định dưới dạng danh sách được phân tách bằng dấu phẩy gồm các giá trị kích thước thử nghiệm được phép (nhỏ, trung bình, lớn hoặc rất lớn), có thể đứng sau ký hiệu "-" được dùng để biểu thị các kích thước thử nghiệm bị loại trừ. Ví dụ:

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

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

sẽ chỉ thử nghiệm các thử nghiệm vừa và nhỏ bên trong //foo.

Theo mặc định, 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ờ nhất định. Bộ lọc thời gian chờ kiểm thử được chỉ định dưới dạng danh sách các giá trị thời gian chờ kiểm thử được phân tách bằng dấu phẩy (ngắn, trung bình, dài hoặc vĩnh viễn), có thể đứng sau ký hiệu "-" được dùng để biểu thị thời gian chờ kiểm thử bị loại trừ. Hãy xem --test_size_filters để biết cú pháp mẫu.

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

--test_tag_filters=tag[,tag]*

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

Ví dụ:

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

sẽ thử nghiệm các mục tiêu được gắn thẻ bằng 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 thẻ sizelocal của kiểm thử theo cách này.

--test_lang_filters=string[,string]*

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

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

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

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

sẽ kiểm thử tất cả các mục tiêu trong //baz/..., ngoại trừ các phiên bản foo_testbar_test.

--test_filter=filter-expression

Chỉ định một bộ lọc mà trình chạy kiểm thử có thể sử dụng để chọn một tập hợp con các chương trình 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 trong số đó có thể được thực thi; trong một số trường hợp, chỉ một số phương thức kiểm thử nhất định được chạy.

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 hoạt động kiểm thử. Đó có thể là một toàn bộ chuỗi, chuỗi con hoặc biểu thức chính quy. --test_filter là một tiện ích khi bạn truyề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ợ thuộc tính này.

Độ 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 các tệp nhật ký bổ sung.

--explain=logfile

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

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

--verbose_explanations

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

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

Việc sử dụng tuỳ chọn này có thể làm tăng đáng kể thời lượng của tệp giải thích đã tạo và mức 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 (lấy đối số tên tệp) khiến Bazel ghi dữ liệu lập hồ sơ 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. Hồ sơ bản dựng có thể hữu ích trong việc biết được lệnh build của Bazel đang dành thời gian ở đâu.

--[no]show_loading_progress

Tuỳ chọn này giúp Bazel xuất các thông báo tiến trình tải gói. Nếu bạn tắt tính năng này, các thông báo sẽ không hiển thị.

--[no]show_progress

Tuỳ chọn này khiến thông báo tiến trình hiển thị; tuỳ chọn này được bật theo mặc định. Khi bạn tắt 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 các thông báo tiến trình xuống còn một thông báo cho mỗi 0,02 giây.

--show_result=n

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

Mặc dù thông tin về kết quả có thể hữu ích cho các bản dựng của một hoặc một vài mục tiêu, nhưng đối với các bản dựng lớn (chẳng hạn như toàn bộ cây dự án cấp cao nhất), thông tin này có thể gây choáng ngợp và gây mất tập trung; tuỳ chọn này cho phép bạn 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 để in thông tin kết quả đầy đủ. Theo mặc định, giá trị là 1. Trên ngưỡng này, sẽ không có thông tin nào về kết quả hiển thị cho các mục tiêu riêng lẻ. Do đó, bằng 0 khiến thông tin kết quả luôn bị chặn và giá trị rất lớn khiến kết quả luôn được in.

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

Các tệp được in để giúp bạn dễ dàng sao chép và dán tên tệp vào shell, để chạy các tệp thực thi được tạo sẵn. Bạn có thể dễ dàng phân tích cú pháp thông báo "cập nhật" hoặc "không thành công" đối với từng mục tiêu bằng các tập lệnh điều khiển bản dựng.

--sandbox_debug

Tuỳ chọn này khiến Bazel in thêm thông tin gỡ lỗi khi sử dụng hộp cát để thực thi hành động. Tuỳ chọn này cũng giữ lại các thư mục hộp cát để có thể kiểm tra các tệp hiển thị với thao tác trong quá trình thực thi.

--subcommands (-s)

Tuỳ chọn này khiến giai đoạn thực thi của Bazel in toàn bộ dòng lệnh cho mỗi lệnh trước khi thực thi.

  >>>>> # //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)

Khi có thể, các lệnh sẽ được in theo cú pháp tương thích với shell Bourne để có thể dễ dàng sao chép và dán vào dấu nhắc lệnh shell. (Các dấu ngoặc đơn xung quanh được cung cấp để bảo vệ shell khỏi các lệnh gọi cdexec; hãy nhớ sao chép chúng!) Tuy nhiên, một số lệnh được triển khai nội bộ trong Bazel, chẳng hạn như tạo cây liên kết tượng trưng. Không có dòng lệnh để hiển thị những đối tượng này.

--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ì một dòng đơn. Việc này có thể giúp các dòng lệnh dài dễ đọc hơn.

Xem thêm --verbose_failures bên dưới.

Để ghi 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

Tuỳ chọn này khiến giai đoạn thực thi của Bazel in toàn bộ dòng lệnh cho các lệnh không thành công. Đây có thể là phương pháp vô giá để gỡ lỗi bản dựng gặp lỗi.

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

--workspace_status_command=program

Cờ này cho phép bạn chỉ định một tệp nhị phân mà Bazel chạy trước mỗi bản dựng. Chương trình này 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 chế độ kiểm soát nguồn hiện tại.

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

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

Bazel phân vùng các khoá này thành hai nhóm: "stable" (ổn định) và "volatile". (Các tên "ổn định" và "dễ biến động" hơi gây phản trực giác, vì vậy, đừng suy nghĩ nhiều về chúng.)

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

  • bazel-out/stable-status.txt chứa tất cả các khoá và giá trị có 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ị tương ứng

Hợp đồng này là:

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

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

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

    Bazel luôn xuất các khoá biến động sau đây:

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

Trên Linux/macOS, bạn có thể chuyển --workspace_status_command=/bin/true để vô hiệu hoá tính năng truy xuất trạng thái không gian làm việc vì true không làm gì cả (thoát bằng 0) và không in kết quả nào. Trên Windows, bạn có thể truyền đường dẫn đến true.exe của MSYS để đạt được hiệu ứng tương tự.

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

Chương trình mẫu trên Linux sử dụng Git:

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

Truyền đường dẫn của chương trình này bằng --workspace_status_command, tệp trạng thái ổn định sẽ bao gồm các dòng STABLE và tệp trạng thái biến động sẽ bao gồm các dòng còn lại.

--[no]stamp

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

Bạn có thể bật hoặc tắt tính năng đóng dấu một cách rõ ràng trên cơ sở mỗi quy tắc bằng thuộc tính stamp. Vui lòng tham khảo Bách khoa toàn thư về xây dựng để biết thông tin chi tiết. Khi một quy tắc đặt stamp = -1 (mặc định cho các quy tắc *_binary), tuỳ chọn này sẽ xác định xem có bật tính năng đóng dấu hay không.

Bazel không bao giờ đóng dấu các tệp nhị phân được tạo cho cấu hình thực thi (executor), 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), nhãn đánh dấu sẽ bị tắt bất kể --[no]stamp. Việc chỉ định --stamp không buộc xây dựng lại các mục tiêu nếu các phần phụ thuộc của các mục tiêu đó không thay đổi.

Nhìn chung, bạn cần đặt --nostamp cho hiệu suất bản dựng, vì điều này giúp 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

Sử dụng các tuỳ chọn này để kiểm soát nền tảng lưu trữ và nền tảng đích giúp định cấu hình cách hoạt động của bản dựng, cũng như để kiểm soát nền tảng thực thi và chuỗi công cụ nào có sẵn cho các quy tắc Bazel.

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

--platforms=labels

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

--host_platform=label

Nhãn của một 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 làm nền tảng thực thi để chạy các hành động. Các nền tảng 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 nền tảng này sẽ được xem xét trước khi các nền tảng được khai báo trong tệp WORKSPACE bằng register_execution_platforms(). Tuỳ chọn này chấp nhận danh sách các nền tảng được phân tách bằng dấu phẩy theo thứ tự ưu tiên. Nếu cờ được truyền nhiều lần thì ghi đè gần đây nhất.

--extra_toolchains=labels

Các quy tắc chuỗi công cụ cần được cân nhắc 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 các chuỗi công cụ được khai báo trong tệp WORKSPACE bằng register_toolchains().

--toolchain_resolution_debug=regex

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

Khác

--flag_alias=alias_name=target_path

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

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-. Giá trị này sẽ tạo các đường liên kết tượng trưng bazel-bin, bazel-testlogsbazel-genfiles.

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

  • Chặn việc tạo đường liên kết tượng trưng: --symlink_prefix=/ sẽ khiến Bazel không tạo hoặc cập nhật bất kỳ đườ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>. Hãy sử dụng tuỳ chọn này để ngăn hoàn toàn việc tạo đường liên kết tượng trưng.

  • Giảm sự lộn xộn: --symlink_prefix=.bazel/ sẽ khiến Bazel tạo các đường liên kết tượng trưng có tên là bin (v.v.) bên trong một thư mục ẩn .bazel.

--platform_suffix=string

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

--default_visibility=(private|public)

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

--starlark_cpu_profile=_file_

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

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

Đối với các khung hiển thị của cùng một dữ liệu, hãy thử các lệnh pprof svg, weblist.

Sử dụng Bazel cho các bản phát hành

Bazel được cả kỹ sư phần mềm sử dụng trong chu kỳ phát triển và các kỹ sư phát hành khi chuẩn bị các tệp nhị phân để triển khai cho đến giai đoạn phát hành chính thức. 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 sử dụng Bazel.

Lựa chọn quan trọng

Khi sử dụng Bazel cho các bản phát hành, những vấn đề tương tự cũng phát sinh như đối với các tập lệnh khác thực hiện một bản dựng. Để biết thêm thông tin, hãy xem phần Gọi cho Bazel bằng tập lệnh. Cụ thể, bạn nên sử dụng các tuỳ chọn sau:

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

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

Đ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 đồng thời hoạt động tạo và kiểm thử, tạo tất cả các mục tiêu được chỉ định (bao gồm cả mọi mục tiêu không phải mục tiêu 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 các điều kiện tiên quyết được tạo, tức là phiên chạy kiểm thử sẽ xen kẽ với việc tạo bản dựng. Cách làm này thường giúp tăng đáng kể tốc độ.

Tuỳ chọn cho bazel test

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

Nếu bạn đặt tuỳ chọn này thành "auto" (tự động) (mặc định), thì Bazel sẽ chỉ chạy lại quy trình kiểm thử nếu có bất kỳ điều kiện nào sau đây:

  • Bazel phát hiện các thay đổi trong kiểm thử hoặc các phần phụ thuộc của kiểm thử
  • thử nghiệm được đánh dấu là external
  • đã yêu cầu nhiều lần chạy thử nghiệm bằng --runs_per_test
  • kiểm tra không thành công.

Nếu khách hàng "no" (không), tất cả hoạt động kiểm thử sẽ được thực thi vô điều kiện.

Nếu "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 thất bại trong kiểm thử vào bộ nhớ đệm và chạy kiểm thử bằng --runs_per_test.

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

--check_tests_up_to_date

Tuỳ chọn này yêu cầu Bazel không chạy 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 cứ chương trình kiểm thử nào chưa được tạo và chạy trước đó hoặc có kết quả kiểm thử đã lỗi thời (ví dụ: do mã nguồn hoặc 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ử chưa 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 kết quả màu được bật) và sẽ trả về một mã thoát khác 0.

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

Lựa chọn này có thể hữu ích cho quy trình kiểm tra trước khi gửi biểu mẫu.

--test_verbose_timeout_warnings

Tuỳ chọn này yêu cầu Bazel cảnh báo người dùng rõ rà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 thực tế của kiểm thử. Mặc dù thời gian chờ của chương trình kiểm thử phải được đặt sao cho không ổn định, nhưng chương trình kiểm thử có thời gian chờ quá rộng có thể ẩn các sự cố thực sự xuất hiện đột ngột.

Ví dụ: một chương trình kiểm thử thường thực thi trong một hoặc hai phút không nên có thời gian chờ là ETERNAL hoặc DÀI vì các kiểm thử này quá rộng rãi.

Tuỳ chọn này rất hữu ích trong việc giúp người dùng quyết định giá trị thời gian chờ phù hợp hoặc kiểm tra tính hợp lý của các giá trị thời gian chờ hiện có.

--[no]test_keep_going

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

Theo mặc định (khi tuỳ chọn này không được chỉ định hoặc khi được đặt thành mặc định), bạn chỉ được phép thử một lần đối với các quy trình kiểm thử thông thường và 3 lần thử đối với các quy tắc kiểm thử có đặt thuộc tính flaky. Bạn có thể chỉ định một giá trị số nguyên để ghi đè giới hạn tối đa số lần kiểm thử. Bazel cho phép thử nghiệm tối đa 10 lần để 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 thực thi mỗi kiểm thử. Tất cả các lượt thực thi kiểm thử được coi là các kiểm thử riêng biệt (chức năng dự phòng sẽ áp dụng cho từng kiểm thử một cách độc lập).

Trạng thái của một mục tiêu có lần chạy không thành công phụ thuộc vào giá trị của cờ --runs_per_test_detects_flakes:

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

Nếu bạn chỉ định một số duy nhất, thì tất cả 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 ràng buộc hiệu ứng của --runs_per_test nhắm đến các mục tiêu khớp với biểu thức chính quy (--runs_per_test=^//pizza:.*@4 chạy tất cả các lượt kiểm thử dưới //pizza/ 4 lần). Bạn có thể chỉ định dạng --runs_per_test này nhiều lần.

--[no]runs_per_test_detects_flakes

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

--test_summary=output_style

Chỉ định cách hiển thị phần tóm tắt kết quả thử nghiệm.

  • short in kết quả của mỗi lượt kiểm thử cùng với tên của tệp chứa kết quả kiểm thử nếu kiểm thử không thành công. Đây là giá trị mặc định.
  • terse giống như short, nhưng còn ngắn hơn: chỉ in thông tin về các lượt kiểm thử không đạt.
  • detailed in từng trường hợp kiểm thử riêng lẻ không thành công, chứ không chỉ mỗi trường hợp kiểm thử không thành công. Bỏ qua tên của các tệp đầu ra kiểm thử.
  • none không in được bản tóm tắt kiểm thử.

--test_output=output_style

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

  • summary cho thấy một bản tóm tắt về việc từng kiểm thử có đạt hay không. Đồng thời cho thấy tên tệp nhật ký đầu ra của các lượt kiểm thử không thành công. Phầ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ỉ nhìn 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, đạt hoặc không thành công). Đây là hành vi mặc định.
  • errors chỉ gửi đầu ra stdout/stderr kết hợp của các lượt kiểm thử không thành công đến stdout ngay sau khi kiểm thử xong, đảm bảo rằng kết quả kiểm thử của các lượt kiểm thử đồng thời không bị xen kẽ với nhau. In bản tóm tắt tại bản dựng theo kết quả tóm tắt ở trên.
  • all tương tự như errors nhưng in đầu ra cho tất cả các kiểm thử, bao gồm cả những kiểm thử đã đạt.
  • streamed truyền trực tuyến đầu ra stdout/stderr của mỗi lượt kiểm thử theo thời gian thực.

--java_debug

Tuỳ chọn này khiến máy ảo Java của chương trình kiểm thử Java chờ kết nối từ một trình gỡ lỗi tuân thủ JDK trước khi bắt đầu kiểm thử. Tuỳ chọn này ngụ ý --test_output=streamed.

--[no]verbose_test_summary

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

--test_tmpdir=path

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

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

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

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

Các bài kiểm thử nêu rõ danh mục thời gian chờ khác với kích thước của chúng sẽ nhận được cùng một giá trị như thể thời gian chờ đó đã được thẻ kích thước đặt ngầm định. Vì vậy, bài kiểm thử kích thước "nhỏ" mà khai báo thời gian chờ "dài" sẽ có thời gian chờ hiệu quả giống như bài kiểm thử "lớn" không có thời gian chờ rõ ràng.

--test_arg=arg

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

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

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

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

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

Bạn có thể truy cập môi trường qua trong một kiểm thử bằng cách sử dụng System.getenv("var") (Java), getenv("var") (C hoặc C++),

--run_under=command-prefix

Thao tác này chỉ định một tiền tố mà trình chạy kiểm thử sẽ chèn vào trước lệnh kiểm thử trước khi chạy. command-prefix được chia thành các từ bằng cách sử dụng quy tắc mã thông báo shell Bourne, sau đó danh sách các từ sẽ được thêm vào trước lệnh sẽ được thực thi.

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

Có một số điều cần lưu ý:

  • PATH dùng để chạy kiểm thử có thể khác với PATH trong môi trường của bạn, vì vậy, bạn có thể cần 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'

Lựa chọn thử nghiệm

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

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

Cú pháp và các tuỳ chọn còn lại hoàn toàn giống bazel build.

Đang 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 hoạt động điển hình:

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

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

bazel run tương tự nhưng không giống hệt nhau với việc gọi trực tiếp tệp nhị phân do Bazel tạo và hành vi của tệp nhị phân này khác nhau tuỳ thuộc vào việc tệp nhị phân được gọi có phải là phép kiểm thử hay không.

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

Khi tệp nhị phân là một bài kiểm thử, thư mục đang hoạt động hiện tại sẽ là gốc thực thi và bạn sẽ cố gắng tái tạo các bài kiểm thử môi trường thường được chạy. Tuy nhiên, việc mô phỏng không hoàn hảo và các chương trình kiểm thử có nhiều phân đoạn không thể chạy theo cách này (bạn có thể 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 chạy bản dựng.
  • BUILD_WORKING_DIRECTORY: thư mục đang làm việc hiện tại là nơi chạy Bazel.

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

Tuỳ chọn cho bazel run

--run_under=command-prefix

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

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

Khi gọi một tệp nhị phân bằng bazel run, Bazel sẽ in kết quả ghi nhật ký từ chính Bazel và tệp nhị phân trong lệnh gọi. Để làm cho nhật ký bớt ồn hơn, bạn có thể chặn kết quả đầu ra 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 thử nghiệm

bazel run cũng có thể thực thi các tệp nhị phân kiểm thử. Việc này có tác dụng chạy kiểm thử trong một môi trường gần đúng với môi trường được mô tả ở phần Viết kiểm thử. Lưu ý rằng không có đối số --test_* nào có hiệu lực khi chạy kiểm thử theo cách này, ngoại trừ --test_arg .

Dọn dẹp đầu ra của bản dựng

Lệnh clean

Bazel có một lệnh clean, tương tự như lệnh của Make. Thao tác này sẽ xoá các thư mục đầu ra cho mọi 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 được thực thi mà không có tuỳ chọn dòng lệnh nào, thì thư mục đầu ra cho mọi cấu hình sẽ bị xoá.

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

  % bazel clean --expunge

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

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

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

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

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

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

Tài liệu tham khảo về truy vấn Bazel. Vui lòng tham khảo tài liệu đó để tham khảo, xem ví dụ và để biết các tuỳ chọn dòng lệnh dành riêng cho truy vấn.

Công cụ truy vấn chấp nhận một số tuỳ chọn dòng lệnh. --output chọn định dạng đầu ra. --[no]keep_going (bị tắt theo mặc định) khiến công cụ truy vấn tiếp tục xử lý lỗi; hành vi này có thể bị tắt nếu kết quả không hoàn chỉnh không được chấp nhận trong trường hợp xảy ra lỗi.

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

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

Ví dụ: "Hiển thị vị trí của các định nghĩa (trong các tệp BUILD) của tất cả các quy tắc tạo sinh 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. Lớp này hoạt động trên biểu đồ mục tiêu được định cấu hình sau phân tích và hiển thị thông tin về các hành động, cấu phần phần mềm và mối quan hệ của chúng.

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

Phiên bản này hỗ trợ cùng một tập hợp các hàm cũng có trong query truyền thống nhưng siblings, buildfilestests.

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

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

help

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

--[no]long (-l)

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

shutdown

Bạn có thể dừng các quy trình trên 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ủ chuyển sang trạng thái rảnh (ví dụ: sau khi hoàn tất một bản dựng hoặc lệnh khác đang trong quá trình thực hiện). Để biết thêm thông tin chi tiết, hãy xem phần Triển khai ứng dụng/máy chủ.

Các máy chủ Bazel tự ngừng hoạt động sau khi hết thời gian chờ ở trạng thái rảnh, nên lệnh này hiếm khi cần thiết. Tuy nhiên, lệnh này có thể hữu ích trong tập lệnh khi biết rằng sẽ không có thêm bản dựng nào xảy ra trong một không gian làm việc nhất định.

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

info

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

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

Dữ liệu không phụ thuộc vào cấu hình

  • release: nhãn phát hành cho phiên bản Bazel này hoặc "phiên bản phát triển" nếu đây không phải là tệp nhị phân được phát hành.
  • workspace đường dẫn tuyệt đối đến thư mục không gian làm việc cơ sở.
  • install_base: đường dẫn tuyệt đối đến thư mục cài đặt mà thực thể Bazel này sử dụng cho người dùng hiện tại. Bazel cài đặt các tệp thực thi bắt buộc nội bộ bên dưới thư mục này.

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

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

  • output_path: đường dẫn tuyệt đối đến thư mục đầu ra bên dưới thư mục gốc thực thi dùng cho tất cả các tệp thực sự được tạo do các lệnh bản dựng. Nếu thư mục không gian làm việc có thể ghi, thì một đường liên kết tượng trưng có tên là bazel-out sẽ được đặt ở đó trỏ đến thư mục này.

  • server_pid: mã nhận dạng quy trình của quy trình trên 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 vòng đời của máy chủ Bazel, đồng thời dành cho các nhà phát triển và người dùng thành thạo sử dụng Bazel.

  • 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 mới nhất. Lưu ý rằng việc chạy bazel info sẽ ghi đè nội dung của tệp này, vì tệp này sẽ trở thành lệnh Bazel gần đây nhất. Tuy nhiên, vị trí của tệp nhật ký lệnh sẽ không thay đổi trừ phi bạn thay đổi chế độ cài đặt của các tuỳ chọn --output_base hoặc --output_user_root.

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

  • gc-count, gc-time: Tổng số lượt thu gom rác tích luỹ kể từ khi bắt đầu máy chủ Bazel này và thời gian dành để thực hiện các hoạt động đó. Lưu ý rằng các giá trị này không được đặt lại khi bắt đầu mỗi bản dựng.

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

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

% bazel info server_pid
1285

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

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

Ví dụ: trình biên dịch C++ cho cấu hình hiện tại. Đây là biến $(CC) trong môi trường "Make", vì vậy, bạn cần có cờ --show_make_env.

  % bazel info --show_make_env -c opt COMPILATION_MODE
  opt

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

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

version--version

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

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

mobile-install

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

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

--split_apks

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

--start_app

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

--debug_app

Chờ trình gỡ lỗi đí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 được ứng dụng. Đây là chế độ mặc định.
  • COLD Khởi động ứng dụng từ trạng thái sạch sau khi cài đặt.
  • WARM Duy trì và khôi phục trạng thái của ứng dụng khi có số lượt cài đặt gia tăng.
  • DEBUG Chờ trình gỡ lỗi trước khi khởi động ứng dụng ở trạng thái sạch sau khi cài đặt.

--adb=path

Cho biết hệ thống sẽ sử dụng tệp nhị phân adb.

Mặc định là sử dụng adb trong SDK Android do --android_sdk chỉ định.

--adb_arg=serial

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

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

gọi adb dưới dạng

adb -s deadbeef install ...

--incremental_install_verbosity=number

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

dump

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

Theo mặc định, lệnh sẽ chỉ in thông báo trợ giúp nêu rõ các tuỳ chọn có thể dùng để 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 tuỳ chọn.

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

  • --action_cache kết xuất nội dung bộ nhớ đệm hành động.
  • --packages kết xuất nội dung bộ nhớ đệm của gói.
  • --skyframe kết xuất trạng thái của biểu đồ phần phụ thuộc Bazel nội bộ.
  • --rules kết xuất bản tóm tắt quy tắc cho từng quy tắc và lớp khung hình, bao gồm cả số lượng và số hành động. Điều này bao gồm cả quy tắc gốc và quy tắc Starlark. Nếu tính năng theo dõi bộ nhớ được bật, thì mức sử dụng bộ nhớ của quy tắc cũng được in.
  • --skylark_memory sẽ kết xuất một tệp .gz tương thích với 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 vào 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.

Hãy nhớ tiếp tục truyền các tuỳ chọn này cho Bazel đối với mọi lệnh, nếu không, máy chủ sẽ khởi động lại.

Ví dụ:

    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    build --nobuild <targets>

    # Dump rules
    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    dump --rules

    # Dump Starlark heap and analyze it with pprof
    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    dump --skylark_memory=$HOME/prof.gz
    % pprof -flame $HOME/prof.gz

analyze-profile

Lệnh analyze-profile phân tích hồ sơ dấu vết JSON đã được thu thập trước đó trong lệnh gọi Bazel.

canonicalize-flags

Lệnh canonicalize-flags sẽ lấy danh sách các tuỳ chọn cho lệnh Bazel và trả về danh sách các tuỳ chọn có cùng hiệu quả. Danh sách tuỳ chọn mới là danh sách chính tắc. Ví dụ: 2 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 các lệnh khác nhau. Tại thời điểm này, chỉ buildtest được hỗ trợ. Các tuỳ 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

Tuỳ chọn khởi động

Các tuỳ chọn được mô tả trong phần này ảnh hưởng đến quá trình khởi động máy ảo Java mà quy trình máy chủ Bazel sử dụng và áp dụng cho tất cả các lệnh tiếp theo do máy chủ đó xử lý. Nếu có 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ẽ khởi động lại.

Bạn phải chỉ định tất cả các tuỳ chọn được mô tả trong phần này bằng cú pháp --key=value hoặc --key value. Ngoài ra, các tuỳ chọn này phải xuất hiện trước tên của lệnh Bazel. Sử dụng startup --key=value để liệt kê các giá trị 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 và phải chỉ định thư mục có thể ghi. Bazel sẽ sử dụng vị trí này để ghi tất cả kết quả đầu ra. Cơ sở dữ liệu đầu ra cũng là khoá giúp ứng dụng xác định vị trí máy chủ Bazel. Khi thay đổi cơ sở đầu ra, bạn sẽ thay đổi máy chủ sẽ xử lý lệnh.

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

Ví dụ:

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

Trong lệnh này, 2 lệnh Bazel chạy đồng thời (vì toán tử shell &amp;), mỗi lệnh sử dụng một thực thể máy chủ Bazel khác nhau (do cơ sở đầu ra khác nhau). Ngược lại, nếu cơ sở đầu ra mặc định được sử dụng trong cả hai lệnh, thì cả hai yêu cầu sẽ được gửi đến cùng một máy chủ. Máy chủ này sẽ xử lý các yêu cầu theo tuần tự: tạo //foo trước, sau đó tạo bản dựng //bar tăng dần.

--output_user_root=dir

Trỏ đến thư mục gốc nơi tạo các 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 gọi. Trước đây, thuộc tính 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 hiện không được phép nữa. Điều này có thể được cho phép sau khi giải quyết xong vấn đề #11100.

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

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

Bạn có thể sử dụng tuỳ chọn --output_user_root để chọn vị trí cơ sở thay thế cho mọi đầ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à chính Bazel chạy trong đó. Giá trị phải là một đường dẫn đến thư mục chứa JDK hoặc JRE. Không được là một nhãn. Tuỳ chọn này sẽ 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 các JVM mà các quy trình phụ Bazel sử dụng, chẳng hạn như các ứng dụng, kiểm thử, công cụ, v.v. Thay vào đó, hãy sử dụng các tuỳ chọn bản dựng --javabase hoặc --host_javabase.

Cờ này trước đây có tên là --host_javabase (đôi khi được gọi là --host_javabase "bên trái"), nhưng đã được đổi tên để tránh nhầm lẫn với cờ bản dựng --host_javabase (đôi khi được gọi là --host_javabase "bên phải").

--host_jvm_args=string

Chỉ định một tuỳ chọn khởi động cần chuyển đến máy ảo Java mà chính Bazel chạy trong đó. Bạn có thể sử dụng thuộc tính này để đặt kích thước ngăn xếp, ví dụ:

  % bazel --host_jvm_args="-Xss256K" build //foo

Bạn có thể sử dụng tuỳ chọn này nhiều lần với các đối số riêng lẻ. Lưu ý rằng bạn hiếm khi cần đặt cờ này. Bạn cũng có thể truyền một danh sách các chuỗi được phân tách bằng dấu cách, mỗi chuỗi trong số này sẽ được hiểu là một đối số JVM riêng biệt. Tuy nhiên, tính năng này sắp ngừng hoạt động.

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

--host_jvm_debug

Tuỳ chọn này khiến máy ảo Java chờ kết nối từ trình gỡ lỗi tuân thủ JDWP trước khi gọi phương thức chính của chính Bazel. Tính năng này chủ yếu dành cho các nhà phát triển Bazel sử dụng.

--autodetect_server_javabase

Tuỳ chọn này khiến Bazel tự động tìm kiếm JDK đã cài đặt khi khởi động và quay lại JRE đã cài đặt nếu không có JRE được nhúng. Bạn có thể dùng --explicit_server_javabase để chọn một JRE rõ ràng để chạy Bazel.

--batch

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

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

Bazel sẽ chạy chậm hơn ở chế độ xử lý hàng loạt hoặc với các giải pháp thay thế được mô tả ở trên. Lý do là bộ nhớ đệm của tệp bản dựng (cùng nhiều nội dung khác) nằm trong bộ nhớ, nên không được giữ lại giữa các lệnh gọi lô tuần tự. Do đó, việc sử dụng chế độ hàng loạt thường có ý nghĩa hơn trong các trường hợp hiệu suất ít 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 sẽ chờ sau yêu cầu của ứng dụng khách 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 quy trình của máy chủ Bazel tồn tại vô thời hạn.

Các tập lệnh gọi Bazel có thể sử dụng tuỳ chọn này để đảm bảo rằng các quy trình này không rời khỏi các quy trình của máy chủ Bazel trên máy của người dùng khi chúng không chạy. Ví dụ: một tập lệnh 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 tạo 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 bản dựng trong không gian làm việc đó, thì tập lệnh gửi trước cần phải khởi động máy chủ Bazel chỉ để tập lệnh đó ở trạng thái rảnh trong thời gian còn lại. 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 if lệnh này khiến máy chủ mới khởi động, thì máy chủ đó sẽ thoát ngay, nhưng nếu đã có máy chủ đang chạy, thì máy chủ đó sẽ tiếp tục chạy cho đến khi máy chủ không hoạt động như thường lệ. Tất nhiên, bộ tính giờ ở trạng thái rảnh của máy chủ hiện tại sẽ được đặt lại.

--[no]shutdown_on_low_sys_mem

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

Ngoài việc chạy quy trình kiểm tra ở trạng thái rảnh tương ứng với max_idle_secs, máy chủ bản dựng sẽ bắt đầu theo dõi bộ nhớ hệ thống hiện có sau khi máy chủ không hoạt động trong một thời gian. Nếu bộ nhớ hệ thống còn trống quá ít, máy chủ sẽ thoát.

--[no]block_for_lock

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

Nhà phát triển có thể sử dụng quy trình này trong các quy 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ên lịch IO hiệu quả nhất. 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ự kiến chỉ có thể đáp ứng mức độ ưu tiên 4. Giá trị âm sẽ bị bỏ qua.

--batch_cpu_scheduling

Sử dụng tính năng lập lịch biểu CPU batch cho Bazel. Chính sách này hữu ích đối với những tải công việc không mang tính tương tác nhưng không muốn hạ thấp giá trị tốt đẹp của chúng. Xem "man 2 sched_setscheduler". Chính sách này có thể cải thiện khả năng tương tác hệ thống tốt hơn nhưng sẽ hao tổn thông lượng Bazel.

Tuỳ 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 khi khởi động hay không. (Các lựa chọn khởi nghiệp được thông báo vô điều kiện.)

--color (yes|no|auto)

Tuỳ chọn này xác định xem Bazel có sử dụng màu để làm nổi bật kết quả đầu ra trên màn hình hay không.

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

--config=name

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

--curses (yes|no|auto)

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

Nếu bạn đặt tuỳ chọn này thành yes, chế độ điều khiển con trỏ sẽ bật. Nếu bạn đặt tuỳ chọn này thành no, chế độ điều khiển con trỏ sẽ tắt. Nếu bạn đặt tuỳ chọn này thành auto, thì việc sử dụng các chế độ điều khiển con trỏ sẽ bật trong các điều kiện tương tự như đối với --color=auto.

--[no]show_timestamps

Nếu bạn chỉ định, một dấu thời gian sẽ được thêm vào mỗi thông báo do Bazel tạo để chỉ định thời điểm hiển thị thông báo.