命令和选项

<ph type="x-smartling-placeholder"></ph> 报告问题 查看来源 敬上 每晚 · 7.3。 · 7.2 条 · 7.1。 · 7.0。 · 6.5

本页面介绍了适用于各种 Bazel 命令的选项 例如 bazel buildbazel runbazel test。此网页是随播网页 转到使用 Bazel 构建中的 Bazel 命令列表。

目标语法

某些命令(如 buildtest)可以对目标列表执行操作。他们 使用的语法比标签更灵活,详见 指定要构建的目标

选项

以下各部分介绍了在配置期间 build。在 help 命令中使用 --long 时,在线 帮助消息提供有关应用含义、类型和 默认值。

大多数选项只能指定一次。如果指定多次, 最后一个实例胜出。可多次指定的选项包括 在线帮助中注明“可能多次使用”字样。

软件包位置

--package_path

此选项指定搜索 查找给定软件包的 BUILD 文件。

Bazel 会通过搜索软件包路径查找其软件包。这是一个冒号 按顺序排列的单独 bazel 目录列表,每个 bazel 目录都是 部分源代码树。

如需使用 --package_path 选项指定自定义软件包路径,请执行以下操作:

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

软件包路径元素可以采用三种格式指定:

  1. 如果第一个字符为 /,则路径为绝对路径。
  2. 如果路径以 %workspace% 开头,则采用相对路径 最近的文件所属目录。 例如,如果您的工作目录 为 /home/bob/clients/bob_client/bazel/foo,则 软件包路径中的字符串 %workspace% 已展开 发送至 /home/bob/clients/bob_client/bazel
  3. 其他所有内容都将相对于工作目录采用。 这通常不是您想要的操作 如果使用 Bazel 工作区下的目录中的 Bazel,可能会出现意外行为。 例如,如果您使用 package-path 元素 ., 然后通过 cd 命令进入该目录 /home/bob/clients/bob_client/bazel/foo,软件包 将从 /home/bob/clients/bob_client/bazel/foo 目录中。

如果您使用非默认软件包路径,请在 Bazel 配置文件

Bazel 不需要任何软件包 当前目录,因此您可以从空的 bazel 进行构建。 工作区,前提是可以在其他位置找到所有必要的软件包 。

示例:基于空客户端构建

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

--deleted_packages

此选项以逗号分隔列表的形式指定 Bazel 应视为已删除,且不应尝试从任何目录加载 。这可用于模拟删除软件包的操作 确实会删除它们

检查错误

这些选项用于控制 Bazel 的错误检查和/或警告。

--[no]check_visibility

如果此选项设置为 false,则可见性检查会降级为警告。 此选项的默认值为 true。 检查已完成。

--output_filter=regex

--output_filter 选项将仅显示构建和编译 针对与正则表达式匹配的目标发出警告。如果目标没有 匹配指定的正则表达式,且其执行成功,则其标准 输出和标准错误即可。

以下是此选项的一些典型值:

`--output_filter=&#39;^//(first/project|second/project):&#39;` 显示指定软件包的输出。
`--output_filter=&#39;^//((?!(first/bad_project|second/bad_project):).)*$&#39;` 不显示指定软件包的输出。
`--output_filter=` 显示所有内容。
`--output_filter=DONT_MATCH_ANYTHING` 不显示任何内容。

工具标记

这些选项可以控制 Bazel 将传递给其他工具的选项。

--copt=cc-option

此选项带有一个要传递给编译器的参数。 该参数会在调用时传递给编译器 预处理、编译和/或汇编 C、C++ 或 编译器代码。建立关联时,系统不会传递此参数。

此选项可以多次使用。例如:

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

将编译 foo 库而不编译调试表,因此会生成 与位置无关的代码。

--host_copt=cc-option

此选项带有一个参数,该参数将传递给源文件的编译器 是在主机配置中编译的类似于 --copt 选项,但仅适用于 主机配置。

--host_conlyopt=cc-option

此选项带有一个参数,该参数将传递给 C 源文件的编译器 是在主机配置中编译的类似于 --conlyopt 选项,但仅适用于 添加到主机配置中。

--host_cxxopt=cc-option

此选项带有一个参数,该参数将传递给 C++ 源文件的编译器 是在主机配置中编译的类似于 --cxxopt 选项,但仅适用于 主机配置。

--host_linkopt=linker-option

此选项带有一个参数,该参数将传递给源文件的链接器 是在主机配置中编译的类似于 --linkopt 选项,但仅适用于 主机配置。

--conlyopt=cc-option

此选项带有一个要在编译 C 源文件时传递给编译器的参数。

它与 --copt 类似,但仅适用于 C 编译, 而不是 C++ 编译或链接。这样您就可以传递特定于 C 的选项 (例如 -Wno-pointer-sign)。--conlyopt

--cxxopt=cc-option

此选项带有一个参数,当 编译 C++ 源文件。

它与 --copt 类似,但仅适用于 C++ 编译, C 语言编译或链接。因此,您可以传递特定于 C++ 的选项 (例如 -fpermissive-fno-implicit-templates)。--cxxopt

例如:

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

--linkopt=linker-option

此选项带有一个要在链接时传递给编译器的参数。

这与 --copt 类似,但仅适用于链接。 而不是编译。因此,您可以传递只有意义的编译器选项 (例如 -lssp-Wl,--wrap,abort) 使用 --linkopt。例如:

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

制作规则还可以在属性中指定关联选项。此选项的 设置始终优先。另请参阅 cc_library.linkopts

--strip (always|never|sometimes)

此选项决定了 Bazel 是否会从 所有二进制文件和共享库,方法是使用 -Wl,--strip-debug 选项调用链接器。 --strip=always 表示始终删除调试信息。 --strip=never 表示一律不删除调试信息。 默认值为 --strip=sometimes,表示如果 --compilation_modefastbuild

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

会编译目标,同时从所有已生成的代码中删除调试信息 二进制文件

Bazel 的 --strip 选项与 ld 的 --strip-debug 选项相对应: 它只会删除调试信息如果由于某种原因您想要删除所有符号, 不仅是 debug 符号,还需要使用 ld 的 --strip-all 选项, 为此,您可以将 --linkopt=-Wl,--strip-all 传递给 Bazel。亦是 请注意,设置 Bazel 的 --strip 标志会覆盖 --linkopt=-Wl,--strip-all,因此您只应设置其中一个。

如果您只构建单个二进制文件,并希望剥离所有符号,那么 传递 --stripopt=--strip-all 并显式构建 目标的 //foo:bar.stripped 版本。如 --stripopt - 这会在最终二进制文件完成上传后应用剥离操作 链接,而不是在构建的所有链接操作中进行剥离。

--stripopt=strip-option

这是在生成文本时要传递给 strip 命令的附加选项 一个 *.stripped 二进制文件。默认 为 -S -p。此选项可以多次使用。

--fdo_instrument=profile-output-dir

--fdo_instrument 选项支持 FDO(反馈导向型优化)配置文件会输出 会执行构建的 C/C++ 二进制文件。对于 GCC,所提供的参数将用作 .gcda 文件的每个对象文件目录树的目录前缀 包含每个 .o 文件的配置文件信息。

在配置文件数据树生成之后,配置文件树 压缩文件后提供给 --fdo_optimize=profile-zip 用于启用 FDO 优化编译的 Bazel 选项。

对于 LLVM 编译器,参数同时也是原始 LLVM 配置文件所在的目录 数据文件。例如:--fdo_instrument=/path/to/rawprof/dir/

--fdo_instrument--fdo_optimize 选项不能同时使用。

--fdo_optimize=profile-zip

--fdo_optimize 选项支持使用 执行 FDO 的每个对象文件配置文件信息(反馈 直接优化)优化。对于 GCC,参数 提供的是包含之前生成的文件树的 ZIP 文件 的 .gcda 文件,其中包含每个 .o 文件的配置文件信息。

或者,提供的参数可以指向自动配置文件 以扩展名 .afdo 标识。

对于 LLVM 编译器,所提供的参数应指向已编入索引的 LLVM llvm-profdata 工具准备的配置文件输出文件,其中应包含 .profdata 。

--fdo_instrument--fdo_optimize 选项不能同时使用。

--[no]output_symbol_counts

启用后,C++ 可执行二进制文件的每个黄金调用链接都将输出 符号计数文件(通过 --print-symbol-counts 黄金 选项)。对于每个链接器输入,该文件都会记录 以及二进制文件中使用的符号数量。 此信息可用于跟踪不必要的链接依赖关系。 符号计数文件以名称 [targetname].sc

此选项在默认情况下处于停用状态。

--java_language_version=version

此选项指定 Java 源代码的版本。例如:

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

编译和仅允许与 Java 8 规范兼容的结构。 默认值为 11。--&gt; 可能的值包括 8、9、10、11、14 和 15,并可通过 使用 default_java_toolchain 注册自定义 Java 工具链。

--tool_java_language_version=version

Java 语言版本,用于构建在构建期间执行的工具。 默认值为 11。

--java_runtime_version=version

此选项指定用于执行代码和运行测试的 JVM 版本。例如:

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

从远程代码库下载 JDK 11 并使用 JDK 11 运行 Java 应用。

默认值为 localjdk。 可能的值包括:localjdklocaljdk_versionremotejdk_11remote_jdk17。 您可以扩展这些值,只需使用 local_java_repositoryremote_java_repostory 代码库规则。

--tool_java_runtime_version=version

用于执行构建期间所需工具的 JVM 版本。 默认值为 remotejdk_11

--jvmopt=jvm-option

此选项允许将选项参数传递给 Java 虚拟机。它可用于 使用一个大型参数,或多次使用单个参数。例如:

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

将使用服务器虚拟机启动所有 Java 二进制文件,并将 将虚拟机的启动堆大小设置为 256 MB。

--javacopt=javac-option

此选项允许将选项参数传递给 javac。它可用于 使用一个大型参数,或多次使用单个参数。例如:

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

将使用 javac 默认调试信息重新构建 java_binary (而不是 bazel 默认值)。

选项会在 Bazel 内置默认选项之后传递给 javac javac 和 per-rule 选项之前。最后一个规范是 javac 的任何选项都适用。javac 的默认选项包括:

  -source 8 -target 8 -encoding UTF-8

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

此选项用于控制 javac 是否检查缺少的直接依赖项。 Java 目标必须将所有直接使用的目标明确声明为 依赖项此标记指示 javac 确定实际使用的 JAR 对每个 java 文件进行类型检查,如果不是输出内容,则发出警告/错误 当前目标的直接依赖项。

  • off 表示停用检查。
  • warn 表示 javac 会生成以下标准 Java 警告: 为每个缺失的直接依赖项类型 [strict]
  • defaultstricterror全部 平均而言 javac 将生成错误而不是警告,导致当前 如果发现任何缺失的直接依赖项,目标将无法进行构建。 这也是未指定该标志的默认行为。

构建语义

这些选项会影响构建命令和/或输出文件内容。

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

--compilation_mode 选项(通常简称为 -c), 尤其是 -c opt)采用以下参数:fastbuilddbgopt,并且会影响各种 C/C++ 代码生成 优化程度和完整性 调试表。Bazel 对每种格式使用不同的输出目录 因此您无需编写任何代码 每次都需要完全重新构建。

  • fastbuild 表示尽快构建: 生成最少的调试信息 (-gmlt -Wl,-S),并且不进行优化。这是默认值。注意:系统将设置 -DNDEBUG
  • dbg 表示启用了调试 (-g) 的构建, 以便您可以使用 gdb(或其他调试程序)。
  • opt 表示启用了优化的构建; 并停用了 assert() 调用 (-O2 -DNDEBUG)。 在 opt 模式下不会生成调试信息 除非您也传递 --copt -g

--cpu=cpu

此选项指定要使用的目标 CPU 架构 在构建期间编译二进制文件。

--action_env=VAR=VALUE

指定执行所有操作期间可用的环境变量集。 变量可以按名称指定,在这种情况下,值将从 调用环境,也可以通过 name=value 对进行设置,而该值独立于 调用环境

--action_env 标志可以指定多次。如果将值分配给同一 变量,则最新的赋值优先。--action_env

--experimental_action_listener=label

experimental_action_listener 选项指示 Bazel 使用 label 指定的 action_listener 规则的详细信息, 将 extra_actions 插入构建图。

--[no]experimental_extra_action_top_level_only

如果此选项设置为 true,则由 --experimental_action_listener 命令 订单项选项只能安排在顶级定位中使用。

--experimental_extra_action_filter=regex

experimental_extra_action_filter 选项指示 Bazel 执行以下操作: 对要安排 extra_actions 的目标集进行过滤。

此标记只有在与 --experimental_action_listener 标志。

默认情况下,extra_actions 请求的构建目标。 --experimental_extra_action_filter会将时间安排限制为 extra_actions,其所有者的标签与指定的 正则表达式。

以下示例将限制 extra_actions 的调度 仅应用于所有者标签中包含“/bar/”的操作:

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

--host_cpu=cpu

此选项指定应该 构建托管工具所用的工具。

--fat_apk_cpu=cpu[,cpu]*

要在其传递 deps 中构建 C/C++ 库的 CPU android_binary 条规则。其他 C/C++ 规则不受影响。例如,如果 cc_library 出现在 android_binary 规则和deps cc_binary 规则,cc_library 将至少构建两次: 对于使用 --fat_apk_cpu 指定的每个 CPU 运行一次, android_binary规则,而针对使用 --cpu(适用于 cc_binary 规则)。

默认值为 armeabi-v7a

会创建一个 .so 文件,并将其打包到以下 APK 中: 使用 --fat_apk_cpu 指定的每个 CPU。.so 文件的名称 会在 android_binary 规则的名称前添加“lib”作为前缀。例如,如果 android_binary 为“foo”,则文件为 libfoo.so

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

标签或执行路径与某个包含正则表达式相匹配的任何 C++ 文件(如果存在) 将构建不匹配任何排除表达式的表达式 。标签匹配使用规范形式的标签。 (即 //package:label_name)。

执行路径是工作区目录的相对路径,包括基本名称 (包括扩展名)。它还包括任何依赖于平台的前缀。

为了匹配生成的文件(例如 genrule 输出) Bazel 只能使用执行路径。在这种情况下,正则表达式不应以“//”开头 因为它与任何执行路径都不匹配。软件包名称可采用以下格式: --per_file_copt=base/.*\.pb\.cc@-g0。与每 .pb.cc 文件(位于名为 base 的目录下)。

此选项可以多次使用。

无论使用哪种编译模式,都会应用此选项。例如,可以 使用 --compilation_mode=opt 进行编译,并选择性地编译一些 或未启用优化功能的文件。

注意:如果某些文件是有选择地使用调试符号编译的,那么这些符号 在关联过程中可能会被删除这可以通过设置 --strip=never

语法[+-]regex[,[+-]regex]...@option[,option]...Where regex 代表可以带有前缀的正则表达式 使用 + 识别 include 模式,使用 - 识别 排除格式。option 代表传递的任意选项, 传递到 C++ 编译器。如果某个选项包含 ,,则必须按如下方式引用它 \,。选项还可以包含 @,因为只有第一个 @ 用于将正则表达式与选项分隔开来。

示例--per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs-O0-fprofile-arcs 选项添加到命令中 用于 //foo/ 中除 file.cc 之外的所有 .cc 文件的 C++ 编译器的行。

--dynamic_mode=mode

确定 C++ 二进制文件是否会动态链接、与 构建规则中的 linkstatic 属性

模式:

  • auto:转换为依赖于平台的模式; default(适用于 Linux)和 off(适用于 cygwin)。
  • default:允许 bazel 选择是否动态关联。 如需了解详情,请参阅 linkstatic 信息。
  • fully:动态关联所有目标。这将加快 关联时间,并减小所生成的二进制文件的大小。
  • off:关联以下域中的所有目标 大多数是静态模式。 如果在 linkopt 中设置了 -static,则目标将更改为完全静态。

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

启用 Fission, 这会将 C++ 调试信息写入专用的 .dwo 文件而不是 .o 文件, 不然。这大大减少了链接的输入大小,并且可以缩短链接时间。

设置为 [dbg][,opt][,fastbuild] 时(例如: --fission=dbg,fastbuild),Fission 已启用 仅适用于指定的一组编译模式。这对于 bazelrc 非常有用 设置。如果设置为 yes,则 Fission 处于启用状态 。如果设置为 no,系统会停用 Fission 。默认值为 no

--force_ignore_dash_static

如果设置了此标志,则 linkopt 中的任何 -static 选项 cc_* 规则 BUILD 文件会被忽略。这只能作为 针对 C++ 安全加固 build 的临时解决方案。

--[no]force_pic

启用后,所有 C++ 编译都会生成位置无关代码 ("-fPIC"), 链接首选 PIC 预构建库而不是非 PIC 库,并且链接生成 位置独立的可执行文件(“-pie”)。默认为停用。

--android_resource_shrinking

选择是否针对 android_binary 规则执行资源缩减。为 shrink_resources 属性 android_binary 规则;有关详情,请参阅关于该规则的文档。默认为关闭。

--custom_malloc=malloc-library-target

指定后,始终使用指定的 malloc 实现,覆盖所有 malloc="target" 属性,包括使用 (不指定任何 malloc)。

--crosstool_top=label

此选项指定 crosstool 编译器套件的位置 用于在构建期间用于所有 C++ 编译。Bazel 会查看 CROSSTOOL 文件的位置,并使用该位置自动确定 --compiler的设置。

--host_crosstool_top=label

如果未指定,Bazel 将使用 --crosstool_top 的值进行编译 代码,例如在构建期间运行的工具。此标记的主要用途 启用交叉编译

--apple_crosstool_top=label

用于在 deps 的传递 deps 中编译 C/C++ 规则的交叉工具 objc*、ios* 和 apple* 规则。对于这些目标,此标志会覆盖 --crosstool_top

--android_crosstool_top=label

用于在 deps 的传递 deps 中编译 C/C++ 规则的交叉工具 android_binary 条规则。如果订单项中的其他目标 需要使用不同的 Crosstool。默认使用交叉工具 由 WORKSPACE 文件中的 android_ndk_repository 规则生成。 另请参阅 --fat_apk_cpu

--compiler=version

此选项可指定 C/C++ 编译器版本(例如 gcc-4.1.0) 用于在构建期间编译二进制文件。如果您想 则应该使用 CROSSTOOL 文件而不是 指定此标记。

--android_sdk=label

此选项可指定 Android SDK/平台工具链 和 Android 运行时库,用于构建与 Android 相关的 规则。

如果 android_sdk_repository,系统会自动选择 Android SDK 在 WORKSPACE 文件中定义。

--java_toolchain=label

此选项指定用于编译 Java 的 java_toolchain 的标签 源文件。

--host_java_toolchain=label

如果未指定,bazel 将使用 --java_toolchain 的值进行编译 代码(例如针对在构建期间运行的工具)。此标记的主要用途 启用交叉编译

--javabase=(label)

此选项设置用于 bazel run 的基础 Java 安装的 labelbazel 测试,以及针对由 java_binaryjava_test 规则。JAVABASEJAVA “创作”变量

--host_javabase=label

此选项用于设置要在主机配置中使用的基础 Java 安装的 label, 例如用于主机构建工具(包括 JavaBuilder 和 Singlejar)。

这不选择用于编译 Java 的 Java 编译器 源文件。您可以通过设置 --java_toolchain 选项。

执行策略

这些选项会影响 Bazel 执行构建的方式。 它们应该不会对输出文件产生任何显著影响 生成的输出通常情况下,它们的主要作用是 构建速度

--spawn_strategy=strategy

此选项控制命令的执行位置和方式。

  • standalone 会导致命令作为本地子进程执行。该值为 已弃用。请改用“local”。
  • sandboxed 会导致命令在本地计算机的沙盒内执行。 这要求将所有输入文件、数据依赖关系和工具列为直接 srcsdatatools 属性中的依赖项。 默认情况下,Bazel 在支持沙盒化执行的系统上启用本地沙盒。
  • local 会导致命令作为本地子进程执行。
  • worker 会导致使用永久性工作器(如果可用)执行命令。
  • docker 会导致命令在本地机器的 Docker 沙盒中执行。 这需要安装 Docker。
  • remote 会导致远程执行命令;这仅适用于 远程执行器已单独配置。

--strategy mnemonic=strategy

此选项控制命令的执行位置和方式, --spawn_strategy(以及 带有助记符的 --genrule_strategy Genrule)。请参阅 --spawn_strategy(适用于受支持的 策略及其影响。

--strategy_regexp=&lt;filter,filter,...&gt;=&lt;strategy&gt;

此选项指定应该使用哪个策略来执行带说明的命令 与特定 regex_filter 匹配。请参阅 --per_file_copt,详细了解 regex_filter 匹配。请参阅 --spawn_strategy(适用于受支持的 策略及其影响。

系统会使用与说明匹配的最后一个 regex_filter。此选项会覆盖 用于指定策略的其他标志

  • 示例:--strategy_regexp=//foo.*\\.cc,-//foo/bar=local 表示使用 local 策略(如果其说明与 //foo.*.cc 匹配,但与 //foo/bar 不匹配)。
  • 示例: --strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed 运行“Compiling //foo/bar/baz”sandboxed策略,但逆转 订单会使用 local 运行它。
  • 示例:--strategy_regexp='Compiling.*/bar=local,sandboxed' 运行 “编译 //foo/bar/baz”然后回退到local sandboxed

--genrule_strategy=strategy

这是 --strategy=Genrule=strategy 的简写形式,但已被弃用。

--jobs=n (-j)

此选项接受一个整数参数,用于指定 应同时执行的作业数量 和执行阶段

--progress_report_interval=n

Bazel 会定期针对非 (例如长时间运行的测试)。此选项设置 报告频率,系统每n输出一次进度 。

默认值为 0,表示增量算法:第一个 系统会在 10 秒后输出 30 秒后或 系统每分钟报告一次该进度

当 bazel 使用光标控件时(由 --curses,每秒报告一次进度。

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

这些选项用于指定本地资源的数量(以 MB 为单位的 RAM 和 CPU 逻辑核心的数量) Bazel 在安排在本地运行构建和测试活动时可以考虑的所有因素它们会 整数或关键字(HOST_RAM 或 HOST_CPUS),可以选择后跟 [-|*float] (例如 --local_cpu_resources=2--local_ram_resources=HOST_RAM*.5--local_cpu_resources=HOST_CPUS-1)。 标志是独立的;可以设置其中之一,也可以同时设置两者。默认情况下,Bazel 会估算 直接通过本地系统的配置确定 RAM 容量和 CPU 核心数。

此选项默认处于启用状态,用于指定运行文件 测试和二进制文件的符号链接应在输出目录中构建。 使用 --nobuild_runfile_links 验证是否所有目标都能编译而不会产生开销 用于构建 Runfile 树。

执行测试(或应用)时,其运行时数据 所有依赖项集中在一起在 Bazel 的 输出树就是这个“runfiles”树通常作为 相应的二进制文件或测试。 在测试执行期间,可以使用以下形式的路径访问 Runfile $TEST_SRCDIR/workspace/packagename/filename。 Runfiles 树可确保测试能够访问 即表明它们确实存在依赖关系修改者 默认情况下,Runfiles 树通过构建一组 符号链接。随着链接数的增加 会计算此操作的成本 会显著增加总构建时间,尤其是在 每个单独的测试(或应用)都需要有自己的 runfiles 树。

--[no]build_runfile_manifests

此选项默认处于启用状态,用于指定 runfiles 清单 应该写入输出树。 将其停用意味着 --nobuild_runfile_links

远程执行测试时可以将其停用,因为 Runfiles 树 通过内存中的清单远程创建

--[no]discard_analysis_cache

启用此选项后,Bazel 将舍弃分析缓存 从而释放额外的内存 执行阶段(约 10%)。 但其缺点是后续增量构建速度将变慢。另请参阅 内存节省模式

--[no]keep_going (-k)

与在 GNU Make 中一样,当第一个 错误。有时,尝试构建为 尽可能地减少错误。通过此选项,您可以 并且指定此属性后,build 将尝试 已构建满足前提条件的每个目标,但是 将忽略错误。

虽然此选项通常与 还会影响分析阶段:如果有多个目标 但只有部分规则可以 成功分析后,构建将停止并报错 除非已指定 --keep_going,在这种情况下, 构建将进入执行阶段,但仅针对目标 分析成功的数据

--[no]use_ijars

此选项会改变java_library定位条件的方式 由 Bazel 编译而成您不必使用 java_library 表示依赖编译 java_library 个目标,Bazel 将创建接口 JAR 仅包含非私密成员签名(公共、 访问方法和字段)以及使用 接口 jar 来编译依赖目标。这样, 可以避免在只对 方法正文或类的私有成员。

--[no]interface_shared_objects

此选项会启用接口共享对象,从而将二进制文件和 其他共享库依赖于共享对象的接口, 而非实现方式当只有实现发生变化时,Bazel 可以避免重新构建依赖于更改后的共享库的目标 不需要。

输出选择

这些选项决定了要构建或测试的内容。

--[no]build

此选项会使构建的执行阶段开始;是 默认处于启用状态关闭此选项后,执行阶段为 并且只执行前两个阶段,即加载和分析。

此选项对于验证 BUILD 文件和检测 输入错误,而无需实际构建任何内容。

--[no]build_tests_only

如果指定,Bazel 将仅构建运行 *_test 所需的内容 以及 test_suite 条规则未被滤除 sizetimeout标签语言。 如果指定,Bazel 将忽略命令行中指定的其他目标。 默认情况下,此选项处于停用状态,Bazel 将构建所有内容 其中包括已滤除的 *_testtest_suite 规则 测试。这非常有用 bazel test --build_tests_only foo/... 可能不会检测到所有 build foo 树中的破坏。

--[no]check_up_to_date

此选项会导致 Bazel 不执行构建,而只是检查 指定的所有目标是否都是最新的。如果是这样,build 如常成功完成。但是,如果任何文件共享 而是会报告一个错误, 失败。此选项可能有助于确定某个 build 是否具有 比来源修改更近(例如,提交前 检查),而不会产生构建费用。

另请参阅 --check_tests_up_to_date

--[no]compile_one_dependency

编译参数文件的单个依赖项。这对于 语法检查 IDE 中的源文件,例如,通过重新构建单个 依赖于源文件检测错误的目标, 尽可能在编辑/构建/测试周期内完成。这个参数会影响 对非标志参数进行解释:每个参数都必须是 相对于当前工作文件的目标标签或普通文件名 目录中,并构建一条依赖于每个源文件名的规则。适用于

C++ 和 Java 来源,则优先选择同一语言空间中的规则。对于 具有相同偏好设置的多条规则(在 BUILD 文件。一个明确指定的目标模式, 引用源文件会导致错误。

--save_temps

--save_temps 选项会导致编译器的临时输出 已保存。包括 .s 文件(汇编代码)、.i(预处理的 C)和 .ii (预处理的 C++)文件。这些输出通常有助于调试。临时工将仅 为命令行中指定的目标集生成的。

--save_temps 标志目前仅适用于 cc_* 规则。

要确保 Bazel 输出其他输出文件的位置,请检查 您的--show_result n 设置足够高

--build_tag_filters=tag[,tag]*

如果指定,则 Bazel 将仅构建具有至少一个必需标记的目标 (如果已指定任何一项)且没有任何已排除的代码。build 标记 过滤器指定为以逗号分隔的标记关键字列表, 以“-”开头号用于表示排除的代码。必需的标记 前面带有“+”号。

运行测试时,Bazel 会忽略测试目标的 --build_tag_filters, 即使不符合此过滤条件,此类模型也会构建并运行为避免构建这些类型的过滤器 使用 --test_tag_filters 或通过明确排除这些目标进行测试。

--test_size_filters=size[,size]*

如果已指定,Bazel 会进行测试(如果 --build_tests_only,则进行构建) 指定尺寸),则仅指定具有指定尺寸的测试目标。测试尺寸过滤器 以逗号分隔的测试大小值(小、 中号、大号或大号),可以选择在前面加上“-”用于表示 排除的测试尺寸。例如,

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

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

将只测试 //foo 内的中小型测试。

默认情况下,系统不会应用测试大小过滤。

--test_timeout_filters=timeout[,timeout]*

如果已指定,Bazel 会进行测试(如果 --build_tests_only,则进行构建) 指定超时值),仅测试具有指定超时时间的目标。测试超时过滤器 以逗号分隔列表的形式指定,列出了允许的测试超时值(短、 中、长或永恒),可以选择在前面加上“-”用于表示 排除的测试超时。请参阅 --test_size_filters 示例语法。

默认情况下,系统不会应用测试超时过滤。

--test_tag_filters=tag[,tag]*

如果已指定,Bazel 会进行测试(如果 --build_tests_only,则进行构建) 仅具有至少一个必需标记的测试目标) (如果已指定任何一项)且没有任何已排除的代码。测试代码 过滤器指定为以逗号分隔的标记关键字列表, 以“-”开头号用于表示排除的代码。必需的标记 前面带有“+”号。

例如,

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

将会测试标记为 performancestress 标记,但不是 flaky 标记。

默认情况下,系统不会应用测试代码过滤。请注意 位于测试的 sizelocal 标记中, 。

--test_lang_filters=lang[,lang]*

针对具有官方 *_test 规则的语言,指定以逗号分隔的测试语言列表 (要查看完整的列表,请参阅构建百科全书)。每个 还可选择性地在前面加上“-”用于指定排除的 语言。每种语言的名称应与 *_test 规则中的语言前缀,例如 ccjavash

如果已指定,Bazel 会进行测试(如果 --build_tests_only,则进行构建) 仅指定语言的测试目标)。

例如,

  % bazel test --test_lang_filters=cc,java foo/...

将仅测试 C/C++ 和 Java 测试(使用 cc_testjava_test 规则) foo/...内,同时

  % bazel test --test_lang_filters=-sh,-java foo/...

会运行 foo/... 中的所有测试,但 sh_testjava_test 测试。

默认情况下,系统不会应用测试语言过滤。

--test_filter=filter-expression

指定一个过滤条件,测试运行程序可以使用该过滤条件为测试选择部分测试 。调用中指定的所有目标都会构建,但取决于 那么可能只能执行其中一部分的表达式;在某些情况下 测试方法。

filter-expression 的特定解释最高为 负责运行测试的测试框架。它可能是一个 glob, 子字符串或正则表达式。--test_filter 是为了提供便利 传递不同的 --test_arg 过滤条件参数时, 但并非所有框架都支持

详细程度

这些选项可以控制 Bazel 输出的详细程度 或其他日志文件

--explain=logfile

此选项需要文件名参数,会导致 bazel build 执行阶段的依赖项检查工具, 解释每个构建步骤的执行原因 确保这是最新的解释 logfile

如果您遇到意外的重新构建,这个方法可以帮助您 了解原因。将其添加到 .bazelrc,以便 所有后续构建都会进行日志记录,然后检查 意外执行的步骤。此选项 可能会对效果产生轻微影响,因此建议您删除 以便在不再需要时提供。

--verbose_explanations

此选项可提高所生成说明的详细程度 当 --explain 选项启用时。

特别是在启用了详细解释的情况下 并且重新构建了输出文件 则说明文件中的输出 包含新命令的完整详情(至少 命令)。

使用此选项可能会大幅增加 使用生成的说明文件会降低性能, --explain

如果 --explain 未启用,则 --verbose_explanations 无任何影响。

--profile=file

此选项接受文件名参数,会使 Bazel 写入 分析成一个文件然后可以使用 bazel analyze-profile 命令。构建配置文件 了解 Bazel 的 build 命令花费的时间。

--[no]show_loading_progress

此选项会使 Bazel 输出软件包加载进度 消息。如果停用此设置,系统将不会显示相关消息。

--[no]show_progress

选择此选项后,系统会显示进度消息;CANNOT TRANSLATE 默认值。停用后,系统会禁止显示进度消息。

--show_progress_rate_limit=n

此选项会导致 bazel 每 n 秒最多显示一条进度消息, 其中 n 是一个实数。 此选项的默认值为 0.02,表示 bazel 会限制进度 更改为每 0.02 秒一条。

--show_result=n

此选项用于控制在最后输出结果信息 是 bazel build 命令的一部分。默认情况下,如果一个 已指定构建目标,Bazel 会显示一条消息,说明 该目标是否已成功更新为最新状态,如果是这样 该目标所创建的输出文件的列表。如果有多个 已指定目标,因此不会显示结果信息。

虽然结果信息可能对 或几个目标 - 适用于大型 build(例如整个顶层 项目树),这些信息可能会让人感到无所适从、分散注意力; 此选项可对其进行控制--show_result 采用一个整数参数,该参数表示目标数量上限 并输出其完整结果信息。默认情况下 其值为 1。高于此阈值时,不会出现任何结果信息 。因此,零会导致结果 值过大时, 始终要输出的结果。

用户经常希望选择一个介于 您可以交替构建少量目标(例如, 和大量目标 (例如,在新建工作区或 回归测试)。在前一种情况下,结果信息为 在后一种情况下,它就没那么实用了。与所有 选项,可以通过 .bazelrc 文件。

文件会打印出来,这样便于复制和粘贴 文件名添加到 shell,以运行构建的可执行文件。“最新版本” 或“已失败”即可轻松通过脚本解析每个目标的消息 来驱动构建的

--sandbox_debug

此选项会导致 Bazel 在为 Action 使用沙盒时输出额外的调试信息 执行。此选项还会保留沙盒目录,以便文件对操作可见 可以检查。

--subcommands-s

此选项会使 Bazel 的执行阶段输出完整的命令行 然后再执行该命令。

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

尽可能使用与 Bourne shell 兼容的语法输出命令, 以便能轻松将其复制并粘贴到 shell 命令提示符中。 (提供两边的括号是为了保护 shell 免受 cdexec 调用;请务必复制这些代码!) 但是,有些命令是在 Bazel 内部实现的,例如 创建符号链接树。对于此类应用,没有可显示的命令行。

可能会传递 --subcommands=pretty_print 进行打印 将命令的参数显示为列表,而不是一行。这可能会 有助于提高长命令行的可读性。

另请参阅下文的 --verbose_failures

如需以工具友好的格式将子命令记录到文件中,请参阅 --execution_log_json_file--execution_log_binary_file.

--verbose_failures

此选项会使 Bazel 的执行阶段输出完整的命令行 检查失败的命令这对于调试 构建失败。

失败的命令会以与 Bourne shell 兼容的语法输出, 可将其复制并粘贴到 shell 提示符中。

工作区状态

使用这些选项可以“印章”Bazel 构建的二进制文件: 二进制文件,例如源代码控制修订版本或其他与工作区相关的信息。您可以使用 该机制具有支持 stamp 属性的规则,例如 genrulecc_binary等。

--workspace_status_command=program

通过此标志,您可以指定 Bazel 在每次构建之前运行的二进制文件。程序可以报告 有关工作区状态的信息,例如当前的源代码控制修订版本。

该标记的值必须是原生程序的路径。在 Linux/macOS 上,该目录可能是任何可执行文件。 在 Windows 上,文件必须是原生二进制文件,通常为“.exe”、“.bat”或“.cmd”文件。

程序应该在标准输出中输出零个或多个键值对,每行一个条目, 则退出并返回 0(否则构建会失败)。键名可以是任意名称 请使用大写字母和下划线。键名后面的第一个空格用于分隔 值。该值是该行的其余部分(包括额外的空格)。无论是密钥还是 该值可能会占用多行键不得重复。

Bazel 将密钥划分为两个存储分区:“stable”和“volatile”值。(“稳定”和 “volatile”有点违背常理,所以别想太多。)

然后,Bazel 将键值对写入两个文件:

  • bazel-out/stable-status.txt 包含键名称以 STABLE_ 开头的所有键和值
  • bazel-out/volatile-status.txt 包含其余键及其值

合同如下:

  • “stable”钥匙的应尽量避免更改这些值(如果可能)。如果 bazel-out/stable-status.txt 则 Bazel 会使依赖于它们的操作失效。在 换句话说,如果稳定键的值发生变化,Bazel 将重新运行已标记的操作。 因此,稳定状态不应包含时间戳之类的内容,因为它们 并且让 Bazel 在每次构建时都重新运行标记的操作

    Bazel 始终会输出以下稳定密钥:

    • BUILD_EMBED_LABEL:值为 --embed_label
    • BUILD_HOST:运行 Bazel 的主机的名称
    • BUILD_USER:Bazel 运行时所用的用户名
  • “volatile”钥匙的值可能会经常变化。Bazel 会希望它们始终发生变化 并及时更新 bazel-out/volatile-status.txt 文件。为了避免 但一直重新运行标记的操作,Bazel 会假定 volatile 文件从未运行过 更改。换句话说,如果 volatile 状态文件是唯一一个内容 则 Bazel 不会使依赖于它的操作失效。如果操作的其他输入 则 Bazel 会重新运行该操作,并且该操作将看到更新后的 volatile 状态,但只要发生变化不会导致操作失效。

    Bazel 始终会输出以下易失性键:

    • BUILD_TIMESTAMP:自 Unix Epoch(Unix 纪元)开始的构建时间(以秒为单位)。 除以 System.currentTimeMillis() 除以 1000)

在 Linux/macOS 上,您可以将 --workspace_status_command=/bin/true 传递给 禁止检索工作区状态,因为 true 未成功执行任何操作(退出 零)不输出任何内容。在 Windows 上,您可以传递 MSYS 的 true.exe 的路径。 达到同样的效果

如果工作区状态命令因任何原因失败(退出非零值),构建将会失败。

在 Linux 上使用 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"

使用 --workspace_status_command 传递此程序的路径以及稳定状态文件 将包含 STABLE 行,而 volatile 状态文件则会包含其余行。

--[no]stamp

此选项与 stamp 规则属性结合使用,可控制是否 在二进制文件中嵌入 build 信息。

您可以使用 stamp 属性。有关详情,请参阅“构建百科全书”。时间 规则设置 stamp = -1*_binary 规则的默认值),此选项 确定是否已启用标记。

Bazel 绝不会对针对主机配置构建的二进制文件进行标记, 无论此选项或 stamp 属性如何。对于设置了 stamp = 0*_test 规则的默认设置)的规则,标记会停用,无论 --[no]stamp。如果存在以下情况,指定 --stamp 不会强制重新构建目标: 其依赖项没有发生变化

通常希望设置 --nostamp 来提高构建性能,因为它 降低输入波动并最大化构建缓存。

平台

使用这些选项来控制用于配置构建工作方式的主机和目标平台,以及 控制哪些执行平台和工具链可用于 Bazel 规则。

请参阅有关平台工具链的背景信息。

--platforms=labels

描述目标平台的平台规则的标签, 当前命令

--host_platform=label

描述主机系统的平台规则的标签。

--extra_execution_platforms=labels

可作为执行平台来执行操作的平台。 平台可以按确切目标指定,也可以指定为目标模式。这些 优先考虑的平台将优先于 WORKSPACE 文件中声明的平台, register_execution_platforms()

--extra_toolchains=labels

工具链解析期间要考虑的工具链规则。工具链 可以通过精确目标指定,也可以指定为目标模式。这些工具链 在 WORKSPACE 文件中声明的 API 之前进行考虑, register_toolchains()

--toolchain_resolution_debug=regex

如果工具链类型匹配,则在查找工具链时输出调试信息 正则表达式。可以使用英文逗号分隔多个正则表达式。正则表达式可以是 在开头使用 - 进行求反。这可能会对开发者 Bazel 或 Starlark 规则导致的调试失败。

其他

--flag_alias=alias_name=target_path

一个便捷标志,用于将较长的 Starlark build 设置绑定到较短的名称。有关 请参阅 Starlark 配置

更改生成的便捷符号链接的前缀。通过 符号链接前缀的默认值为 bazel-, 将创建符号链接 bazel-binbazel-testlogsbazel-genfiles

如果由于任何原因无法创建符号链接,则会显示警告 但构建仍会被视为成功。具体来说, 这样你就可以在一个只读目录或者你没有 写入权限。以说明性方式输出的所有路径 在构建结束时发送的消息只会使用 相对短格式(如果符号链接指向预期 位置信息;也就是说,您可以依靠 路径。

此选项的一些常见值:

  • 禁止创建符号链接--symlink_prefix=/会导致 Bazel 创建或更新任何符号链接,包括 bazel-outbazel-&lt;workspace&gt; 符号链接。使用此选项可完全禁止创建符号链接。

  • 化繁为简--symlink_prefix=.bazel/会导致 Bazel 创建 隐藏目录 .bazel 内名为 bin(等)的符号链接。

--platform_suffix=string

为配置简称添加后缀,用于确定 输出目录中。如果将此选项设为不同的值,系统会将文件 例如,为了提高构建作业的缓存命中率, 否则会破坏彼此的输出文件,或者保留输出文件 进行比较

--default_visibility=(private|public)

用于测试 Bazel 默认可见性变更的临时标志。不适合一般用途 但为了完整而记录下来清酒。

--[no]use_action_cache

此选项默认处于启用状态。如果停用,Bazel 将不会使用其本地操作缓存。 停用本地操作缓存可以为干净构建节省内存和磁盘空间, 增量构建速度会变慢

--starlark_cpu_profile=_file_

此标志的值为文件名,会导致 Bazel 收集 有关所有 Starlark 线程的 CPU 使用情况的统计信息, 然后以 pprof 格式写入配置文件 添加到指定文件

此选项有助于识别 因计算过多而导致加载和分析速度缓慢。例如:

$ 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

对于相同数据的不同视图,请尝试使用 pprof 命令 svgweblist

使用 Bazel 发布

在开发过程中,软件工程师都会使用 Bazel 发布工程师在准备用于部署的二进制文件时 部署到生产环境。本部分列出了发布方面的一些提示, 使用 Bazel 打造。

重要选项

使用 Bazel 进行发布 build 时,会出现与其他脚本相同的问题 代码。有关详情,请参阅 从脚本调用 Bazel。具体而言,以下选项 两种方法

这些选项也很重要:

  • --package_path
  • --symlink_prefix: 来管理针对多项配置的构建 将每个版本 带有唯一标识符(如“64bit”)而非“32 位”此选项 用于区分 bazel-bin(等)符号链接。

运行测试

如需使用 bazel 构建和运行测试,请输入 bazel test,后跟 测试目标的名称。

默认情况下,此命令会同时执行构建和测试 活动,构建所有指定的目标(包括任何非测试目标) )和测试 *_testtest_suite目标 他们的前提条件已构建,这意味着测试执行是 它们与建筑物交错这样做通常会导致 速度提升幅度。

bazel test”的选项

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

如果此选项设置为“auto”(默认值),那么只有当以下任一条件发生变化时,Bazel 才会重新运行测试。 适用以下条件:

  • Bazel 检测测试或其依赖项中的更改
  • 该测试已标记为 external
  • 已使用 --runs_per_test 请求多次测试运行
  • 测试失败。

如果设为“no”,系统将无条件执行所有测试。

如果选择“是”,缓存行为将与自动缓存行为相同 只不过它会缓存测试失败情况,并使用 --runs_per_test

已在以下国家/地区默认启用此选项的用户: 其 .bazelrc 文件可能会找到 缩写 -t(开启)或 -t-(关闭) 便于在特定运行时覆盖默认值。

--check_tests_up_to_date

此选项指示 Bazel 不要运行测试,而只是检查和报告 缓存的测试结果如果有任何测试未通过 或者其测试结果已经过时(例如, 源代码或构建选项发生变化),则 Bazel 会 将记录测试的 状态为“NO STATUS”(如果启用了颜色输出,则返回红色), 非零退出代码。

此选项还意味着 [--check_up_to_date](#check-up-to-date) 行为。

此选项对于提交前检查可能很有用。

--test_verbose_timeout_warnings

此选项指示 Bazel 在测试超时时明确警告用户 大大超过测试的实际执行时间。测试期间 应设置超时,以避免其不稳定, 过于宽松的超时可能会掩盖意外出现的实际问题。

例如,一个通常在一两分钟内执行的测试 “ETERNAL”或“LONG”的超时值,因为它们太过慷慨了。

此选项有助于用户决定合适的超时值或 健全性检查现有的超时值

--[no]test_keep_going

默认情况下,所有测试都会运行至完成。如果停用此标志, 不过,在任何未通过的测试中,构建会中止。后续构建步骤 和测试调用不会运行,且正在执行的调用会被取消。 请勿同时指定 --notest_keep_going--keep_going

--flaky_test_attempts=attempts

此选项指定应尝试测试的最大次数 如果由于任何原因而失败最初失败但最终失败的测试 成功在测试摘要中报告为 FLAKY。它是 但在识别 Bazel 退出代码时 或通过测试的总数如果测试未通过所有允许的尝试,则计为 视为已失败

默认(当此选项未指定或设置为 默认),常规测试仅允许一次尝试,以及 3 表示设置了 flaky 属性的测试规则。您可以指定 一个整数值,用于覆盖测试尝试次数上限。借助 Bazel 最多 10 次测试尝试,以防止系统滥用。

--runs_per_test=[regex@]number

此选项指定每个测试应执行的次数。全部 测试作业会被视为单独的测试(回退功能) 将单独应用于每项功能)。

运行失败的目标的状态取决于 --runs_per_test_detects_flakes 标志:

  • 如果缺失,则任何失败的运行都会导致整个测试失败。
  • 如果存在且从同一分片运行两次,则返回 PASS 和 FAIL,则测试 会收到“不稳定”状态(除非其他失败的运行导致其 失败)。

如果指定单个数字,则所有测试都将运行该次数。 或者,也可以使用以下语法指定正则表达式: regex@number。这会将 --runs_per_test 的影响限制到目标 与正则表达式匹配(--runs_per_test=^//pizza:.*@4 运行所有测试) 低于 //pizza/ 4 次)。 可以多次指定这种形式的 --runs_per_test

--[no]runs_per_test_detects_flakes

如果指定了此选项(默认未指定),Bazel 会检测到不稳定 通过 --runs_per_test 更新所有测试分片。如果针对单个分片运行一个或多个 失败,并且针对同一分片传递的一次或多次运行,则目标将是 被认为是易碎的旗帜如果未指定,目标将报告 失败状态。

--test_summary=output_style

指定测试结果摘要的显示方式。

  • short 会输出每个测试的结果以及 包含测试输出的文件(如果测试失败)。此设置为默认值。
  • terse 喜欢“short”,但时长更短:仅限打印 有关未通过测试的信息。
  • detailed 会输出每个失败的测试用例,而不是 每个测试。测试输出文件的名称被省略。
  • none 不会输出测试摘要。

--test_output=output_style

指定测试输出的显示方式:

  • summary 显示每项测试是通过还是 已失败。还会显示失败测试的输出日志文件名称。总结 将在构建结束时输出(在构建期间,您会看到 只是在测试开始、通过或失败时显示简单的进度消息)。 这是默认行为。
  • errors 发送失败测试的合并 stdout/stderr 输出 而是在测试完成后立即进入 stdout,确保 同时进行的测试产生的测试输出不会相互交错。 在构建时根据上面的摘要输出输出摘要。
  • allerrors 类似,但会输出 包括已通过的测试在内
  • streamed 会流式传输每个测试的 stdout/stderr 输出 实时更新。

--java_debug

此选项会导致 Java 测试的 Java 虚拟机等待来自 开始测试之前,兼容 JDWP 的调试程序。此选项表示 --test_output=streamed

--[no]verbose_test_summary

默认情况下,此选项处于启用状态,这会导致测试时间和其他额外 输出的信息(例如测试尝试)将输出到测试摘要中。如果 已指定 --noverbose_test_summary,则测试摘要将 仅包含测试名称、测试状态和缓存的测试指示器, 尽量保持在 80 个字符以内。

--test_tmpdir=path

指定用于在本地执行的测试的临时目录。每次测试 将在此目录内的单独子目录中执行。该目录会 在每个 bazel test 命令开头处进行清理。 默认情况下,bazel 会将此目录放在 Bazel 输出基本目录下。

--test_timeout=seconds--test_timeout=seconds,seconds,seconds,seconds

使用指定的 秒作为新的超时值。如果只提供一个值 用于所有测试超时类别。

您也可以提供四个逗号分隔值,指定 分别设置短时、适度、长时和永久测试(在此情况下 订单)。 无论采用哪种形式,只要测试尺寸为 0 或为负值, 替换为指定超时类别的默认超时值: 编写测试页面定义。 默认情况下,Bazel 会将超时设置应用于所有测试, 根据测试的大小推断超时限制, 隐式设置或显式设置。

明确声明超时类别不同于 尺寸接收的值将与 尺寸标记。因此,对“small”大小进行测试它声明一个“long”超时将会 其有效超时时间与“大型”测试中 超时。

--test_arg=arg

将命令行选项/标志/参数传递给每个测试进程。这个 选项可以多次用于传递多个参数。例如,--test_arg=--logtostderr --test_arg=--v=3

--test_env=variable=_value_--test_env=variable

指定必须注入测试的其他变量 测试环境如果未指定 value,则 继承自用于启动 bazel test 的 shell 环境 命令。

您可以使用 System.getenv("var") (Java)、getenv("var")(C 或 C++)、

--run_under=command-prefix

这会指定测试运行程序将在前面插入的前缀 测试命令的实际效果通过 使用 Bourne shell 将 command-prefix 拆分为单词 词元化规则,然后将单词列表附加到 调用哪个命令会被执行

如果第一个字词是完全限定标签(以 //)。然后使用 对应的可执行位置,并附加到命令前 将与其他字词一起执行。

您需要注意以下几点:

  • 用于运行测试的 PATH 可能不同于您环境中的 PATH, 因此您可能需要对 --run_under 使用绝对路径 命令(command-prefix 中的第一个字词)。
  • stdin 未连接,因此 --run_under 不能用于交互式命令。

示例:

        --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'

测试选择

输出选择选项中所述, 您可以按大小过滤测试 timeout标签语言。便利 “General name”过滤器可以转发 过滤参数到测试运行程序。

bazel test”的其他选项

语法和其余选项完全相同 bazel build

运行可执行文件

bazel run 命令类似于 bazel build,不同之处在于 它用于构建和运行单个目标。以下是一个典型的会话:

  % 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 与直接调用 根据 Bazel 构建的二进制文件及其行为 要调用的二进制文件是否是测试。

如果二进制文件不是测试文件,则当前工作目录将是 二进制文件的 runfiles 树

当二进制文件是测试文件时,当前工作目录将是执行根目录 并且如果诚心诚意地尝试复制环境测试, 错误。不过,此模拟并不完美, 无法以这种方式运行( 可以使用 --test_sharding_strategy=disabled 命令行选项 来解决这个问题)

二进制文件还可以使用以下额外的环境变量:

  • BUILD_WORKSPACE_DIRECTORY:工作区的根目录, build 的状态。
  • BUILD_WORKING_DIRECTORY:当前工作目录,其中 运行 Bazel 时所在的平台。

例如,这些命令可用于在命令行中解释 以方便用户使用的方式

bazel run”的选项

--run_under=command-prefix

这与使用 --run_under 选项实现的效果相同 bazel test参见上文), 只不过它适用于 bazel run 运行的命令,而不是 bazel test 运行的测试 且无法在标签下投放。

从 Bazel 过滤日志记录输出

使用 bazel run 调用二进制文件时,Bazel 会输出 Bazel 的日志记录输出 以及正在调用的二进制文件为了减少日志的干扰,您可以 使用 --ui_event_filters--noshow_progress 标志。

例如:bazel run --ui_event_filters=-info,-stdout,-stderr --noshow_progress //java/myapp:myapp

执行测试

bazel run 还可以执行测试二进制文件,其作用是 测试环境 编写测试。请注意, 以这种方式运行测试时,--test_* 参数会产生影响,但以下情况除外: --test_arg

清理构建输出

clean 命令

Bazel 有一个类似于 Make 的 clean 命令。 它会删除执行的所有构建配置的输出目录 或者由此 Bazel 实例创建的整个工作树 Bazel 实例,以及重置内部缓存。如果执行时未提供任何 命令行选项,然后选择所有配置的输出目录 将被清除

回想一下,每个 Bazel 实例都与单个工作区相关联,因此 clean 命令将删除您已完成的所有构建中的所有输出 此工作区中的这个 Bazel 实例

彻底移除由 Bazel 创建的整个工作树 实例,您可以指定 --expunge 选项。时间 使用 --expunge 执行整洁命令时,直接 移除整个输出基本树,除了 build 输出,其中包含由 Bazel 创建的所有临时文件。它还 在执行清理后停止 Bazel 服务器,这相当于 shutdown 命令。例如, 清理 Bazel 实例的所有磁盘和内存跟踪记录 指定:

  % bazel clean --expunge

或者,您可以使用 --expunge_async。调用 Bazel 命令是安全的 同时异步清除继续运行。

clean命令主要用作 为不再需要的工作区回收磁盘空间。 Bazel 的增量重新构建 因此 clean 可用于恢复一致的 在出现问题时的状态

Bazel 的设计使得这些问题可以修复 这类错误需要优先修复如果您 发现错误的增量 build、提交 bug 报告以及在工具中报告 bug 而不是使用 clean

查询依赖关系图

Bazel 包含一种查询语言, 构建期间使用的依赖关系图。查询语言使用 查询和 cquery 两条命令这两种广告之间的 两个命令是该查询在加载阶段之后运行 而 cquery 在分析阶段之后运行。这些工具 为许多软件工程任务提供宝贵帮助。

查询语言基于 图形代数运算;该文档在

Bazel 查询参考。 请参考该文档 示例以及特定于查询的命令行选项。

查询工具支持 选项。--output 选择输出格式。 --[no]keep_going(默认处于停用状态)会导致查询 工具,以便在出错后继续推进工作;这种行为 如果出现错误且无法接受不完整的结果,则会停用此设置。

--[no]tool_deps 选项 会导致非目标配置中的依赖项包含在 运行查询的依赖关系图。

--[no]implicit_deps 选项默认处于启用状态 隐式依赖项,会添加到对其运行查询的依赖关系图中。一个 隐式依赖项是指未在 BUILD 文件中明确指定的依赖项 但是由 bazel 添加的。

例如:“显示以下项定义的位置(在 BUILD 文件中) 构建 PEBL 树中的所有测试所需的所有 genrule。"

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

查询操作图

您可以使用 aquery 命令查询构建图中的操作。 它对分析后配置的目标图运行,并显示 操作、工件及其关系的相关信息。

该工具接受多个命令行选项。 --output 选择输出格式。默认输出格式 (text) 直观易读,请使用 prototextproto 计算机可读格式。 值得注意的是,aquery 命令运行在常规 Bazel 构建之上,并且继承了 构建期间可用的一组选项。

它支持的一系列功能与传统 query,但 siblingsbuildfilestests

如需了解详情,请参阅操作图查询

其他命令和选项

help

help 命令可提供在线帮助。默认情况下 会显示可用命令和帮助主题的摘要, 使用 Bazel 构建。 指定参数会显示有关特定问题的详细帮助信息, 主题。大多数主题都是 Bazel 命令,例如 buildquery,不过我们在这里提供了其他一些帮助主题 与命令不对应。

--[no]long-l

默认情况下,bazel help [topic] 仅会输出 主题的相关选项的摘要。如果 已指定 --long 选项,类型,默认值 以及每个选项的完整说明。

shutdown

您可以使用 shutdown 停止 Bazel 服务器进程 命令。此命令会导致 Bazel 服务器在运行后立即退出 进入空闲状态(例如,在完成任何构建或其他 命令)。有关详情,请参阅 客户端/服务器实现

Bazel 服务器会在空闲超时后自行停止运行,因此此命令 很少需要但当它位于外部和外部时, 就知道不会再在指定的工作区中进行构建

shutdown接受一个 选项--iff_heap_size_greater_than _n_ 需要整数参数(以 MB 为单位)。如果指定,则会关停 取决于已消耗的内存量这是 这对于启动大量构建的脚本非常有用, 数据泄露,可能会导致其在 时机执行条件式重启会抢占此条件。

info

info 命令会输出与 运行项目或者使用特定的构建配置 (驱动构建的脚本可能会使用它们。)

info 命令还允许单个(可选) 参数,它是以下列表中某个键的名称。 在这种情况下,bazel info key 仅会输出 这个键的值(这对于以下情况尤为方便: 编写 Bazel 脚本,因为这样就不需要通过流水线 至 sed -ne /key:/s/key://p

与配置无关的数据

  • release:此 Bazel 的版本标签 实例或“开发版”如果这不是 二进制文件
  • workspace:基本工作区的绝对路径 目录。
  • install_base:安装的绝对路径 此 Bazel 实例当前用户使用的目录。Bazel 将其内部所需的可执行文件安装在此目录下。

  • output_base:基础输出的绝对路径 此 Bazel 实例使用的目录 工作区组合。Bazel 会完全从头开始 输出。

  • execution_root:执行的绝对路径 output_base 下的根目录。此目录是所有文件的根目录 可供构建期间执行的命令访问,并且 目录中保存这些命令如果工作区目录可写入, 名为 bazel-&lt;workspace&gt; 的符号链接 会放在此处,并指向此目录。

  • output_path:输出的绝对路径 在用于所有文件的执行根目录下的目录 因构建命令而产生的错误。如果工作区目录是 可写,其中一个名为 bazel-out 的符号链接指向 复制到此目录中

  • server_pid:Bazel 服务器的进程 ID 过程。

  • server_log:Bazel 服务器的调试日志文件的绝对路径。 此文件包含在 Bazel 服务器,专供 Bazel 开发者和高级用户使用。

  • command_log:命令日志文件的绝对路径; 其中包含最近提供的 运行 Bazel 命令请注意,运行 bazel info 会覆盖 此文件的内容,因为这样它就会成为最新的 Bazel 命令。 但是,除非 更改--output_base的设置或 --output_user_root 个选项。

  • used-heap-size, committed-heap-size, max-heap-size:报告各种 JVM 堆大小 参数。分别为:当前使用的内存、当前的内存 保证能够从系统供 JVM 使用, 可能的分配。

  • gc-countgc-time: 自此 Bazel 服务器启动以来所耗费的时间 执行这些操作请注意,这些值不会在每次 build。

  • package_path:以英文冒号分隔的路径列表, 按 bazel 搜索过“软件包”。与 --package_path 构建命令行参数。

示例:Bazel 服务器的进程 ID。

% bazel info server_pid
1285

特定于配置的数据

这些数据可能会受到所传递的配置选项的影响 到bazel info,时长: 示例 --cpu--compilation_modeinfo命令接受 用于控制依赖项的选项 其中一些指标决定了 构建的输出目录、编译器的选择等等。

  • bazel-binbazel-testlogsbazel-genfiles:报告 bazel-* 目录,由 build 的位置。这通常(但并不总是)等同于 在基本工作区目录中创建的 bazel-* 符号链接 成功构建不过,如果工作区目录是只读的 无法创建 bazel-* 符号链接。使用 是 bazel info 报告的值,而不是假设 会更可靠。
  • 完整的 “创作”环境。如果 --show_make_env 标志为 当前配置“Make”中的所有变量环境 (例如 CCGLIBC_VERSION 等)。 这些是使用 $(CC) 访问的变量 或 BUILD 文件中的 varref("CC") 语法。

示例:当前配置的 C++ 编译器。 这是“Make”中的 $(CC) 变量环境 因此需要使用 --show_make_env 标志。

  % bazel info --show_make_env -c opt COMPILATION_MODE
  opt

示例:当前的 bazel-bin 输出目录 配置。即使 由于某种原因,无法创建 bazel-bin 符号链接 (例如,如果您从只读目录构建)。

% 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

version 命令可显示有关构建的 Bazel 的版本详情 二进制文件,包括创建该文件时的更改列表和日期。 在确定您是否拥有最新的 Bazel 或报告 bug。一些有趣的值 分别是:

  • changelist:此版本的 发布了 Bazel。
  • label:此 Bazel 的版本标签 实例或“开发版”如果这不是 二进制文件报告 bug 时非常有用。

不含其他参数的 bazel --version 会发出与以下内容相同的输出: bazel version --gnu_format,除非没有可能启动 运行 Bazel 服务器或解压服务器归档可以运行 bazel --version 任何位置 - 它不需要工作区目录。

mobile-install

mobile-install 命令会将应用安装到移动设备。 目前仅支持运行 ART 的 Android 设备。

如需了解详情,请参阅 bazel mobile-install

支持的选项如下:

--incremental

如果已设置,Bazel 会尝试以增量方式安装该应用,也就是说,仅安装 自上次构建以来更改的部分。此操作无法更新资源 从 AndroidManifest.xml、原生代码或 Java 引用 资源(例如 Class.getResource() 引用的资源)。如果这些 必须省略此选项。违背 Bazel 的精神 由于 Android 平台的局限性 用户责任来判断此命令是否合适,以及 需要完整安装时才会停用。

如果你使用的设备搭载的是 Marshmallow 或更高版本,请考虑 --split_apks 标志。

--split_apks

是否使用拆分 APK 在设备上安装和更新应用。 仅适用于运行 Marshmallow 或更高版本的设备。请注意, --incremental 标志 使用 --split_apks 时不需要。

--start_app

安装后以干净状态启动应用。等同于 --start=COLD

--debug_app

等待连接调试程序,然后在安装后以干净状态启动应用。 等同于 --start=DEBUG

--start=_start_type_

安装应用后应如何启动应用。支持的 _start_type_s 包括:

  • NO 无法启动应用。这是默认设置。
  • COLD:在安装后从干净状态启动应用。
  • WARM 在增量安装时保留和恢复应用状态。
  • DEBUG 在启动后以干净状态启动应用之前等待调试程序 安装。

--adb=path

指示要使用的 adb 二进制文件。

默认情况下,使用由 --android_sdk

--adb_arg=serial

adb 的额外参数。这些命令位于 命令行,通常用于指定要安装到哪个设备。 例如,如需选择要使用的 Android 设备或模拟器,请执行以下操作:

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

以如下形式调用 adb

adb -s deadbeef install ...

--incremental_install_verbosity=number

增量安装的详细程度。若要将调试日志记录设置为 1,请将此项设为 1 输出内容。

dump

dump 命令会输出 stdout 的 Bazel 服务器的内部状态。此命令旨在 主要供 Bazel 开发者使用 未指定,且可能会发生变化。

默认情况下,命令将只输出可能有帮助的帮助消息 用于转储特定区域的 Bazel 状态的选项。为了转储 内部状态,必须至少指定一个选项。

支持以下选项:

  • --action_cache 会转储操作缓存内容。
  • --packages 会转储软件包缓存内容。
  • --skyframe 会转储内部 Bazel 依赖关系图的状态。
  • --rules 会转储每条规则和切面类的规则摘要, 包括计数和操作次数这包括原生规则和 Starlark 规则。 如果启用了内存跟踪,规则的内存消耗量
  • --skylark_memory 会转储一个 将兼容 pprof 的 .gz 文件复制到指定路径。 您必须启用内存跟踪才能使此功能正常运行。

内存跟踪

某些 dump 命令需要内存跟踪。要启用此功能,您必须传递 将启动标志传递给 Bazel:

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

java-agent 签入到 Bazel 中的 third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar,因此请确保 请务必针对 Bazel 代码库的存储位置调整 $BAZEL

别忘了针对每个命令将这些选项传递给 Bazel,否则服务器 重启。

示例:

    % 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

analyze-profile 命令可分析之前收集的数据 使用 --profile 选项。它提供了 用于执行构建执行分析或导出数据 指定的格式。

支持的选项如下:

  • --dump 在 简单易懂的格式不过, 但尚不支持其他格式

有关格式详情和使用帮助,请参阅 通过分析排查性能问题

canonicalize-flags

canonicalize-flags 命令,该命令会接受 Bazel 命令的选项列表, 具有相同效果的选项新的选项列表是规范的选项。例如: 系统会将两个效果相同的选项列表规范化为同一个新列表。

--for_command选项可用于 命令。目前,只有 buildtest 支持。给定命令不支持的选项会导致错误。

例如:

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

启动选项

本部分介绍的选项会影响 Java 的启动 这些虚拟机是 Bazel 服务器进程使用的,并且适用于 由该服务器处理的后续命令如果已有 运行 Bazel 服务器且启动选项不匹配, 必须重启。

本部分介绍的所有选项必须使用 --key=value--key value 语法。此外,这些选项必须显示在 Bazel 的名称之前 命令。使用 startup --key=value 可在 .bazelrc 文件中列出这些内容。

--output_base=dir

此选项需要路径参数,该参数必须指定 可写目录中的内容Bazel 将使用以下位置 输出。输出库也是客户端查找的键 运行 Deployment通过更改输出基准,您将更改服务器 将负责处理命令

默认情况下,输出基准来自用户的登录名, 以及工作区目录(实际上是其 MD5 digest)的名称, 因此,典型值如下所示: /var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e

例如:

 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

在此命令中,两个 Bazel 命令并发运行(由于 shell &amp; 操作符),每个操作符使用不同的 Bazel (因为有不同的输出基准)。 相反,如果两个命令都使用默认输出基准, 系统会将两个请求发送到同一个服务器 依序处理:首先构建 //foo,然后 由 //bar 的增量 build 生成。

--output_user_root=dir

指向在其中创建输出和安装基础的根目录。目录 必须不存在或归发起调用的用户所有。过去, 之前允许指向一个在多个用户之间共享的目录 但现在不允许再使用它了此操作可以一次 问题 #11100 已解决。

如果指定了 --output_base 选项,它会替换 使用 --output_user_root 来计算输出基数。

安装量的计算依据是 --output_user_root,以及嵌入的 Bazel 的 MD5 身份 二进制文件

您可以使用--output_user_root选项 所有 Bazel 输出(安装库和输出)的备用基本位置 (如果文件系统布局中有更好的位置)。

--server_javabase=dir

指定 Bazel 本身在其中运行的 Java 虚拟机。该值必须是 包含 JDK 或 JRE 的目录。它不应是标签。 此选项应显示在任何 Bazel 命令之前,例如:

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

此标志不会影响 Bazel 子进程(如应用、测试、 工具等等使用构建选项 --javabase--host_javabase

此标志之前称为 --host_javabase(有时称为 “left-hand side”--host_javabase),但已重命名以避免与 构建标记 --host_javabase(有时称为 “right-hand side”--host_javabase)。

--host_jvm_args=string

指定要传递给 Bazel 本身所在的 Java 虚拟机的启动选项 。这可用于设置堆栈大小,例如:

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

此选项可以使用单个参数多次使用。请注意, 应该很少需要设置此标志。您还可以传递以空格分隔的字符串列表, 每个 JVM 参数都将解读为单独的 JVM 参数,但此功能很快就会被 已弃用。

此操作影响 Bazel 的子进程:应用、测试、工具等。通过 可执行 Java 程序的 JVM 选项,无论是由 bazel run 运行还是在命令行上运行,都应使用 --jvm_flags 参数, 所有 java_binaryjava_test 计划 联系。或者,对于测试,请使用 bazel test --test_arg=--jvm_flags=foo ...

--host_jvm_debug

此选项会导致 Java 虚拟机等待连接 从兼容 JDWP 的调试程序中 调用 Bazel 本身的主方法。这主要用于 供 Bazel 开发者使用

--autodetect_server_javabase

此选项会使 Bazel 在启动时自动搜索已安装的 JDK, 在嵌入式 JRE 不可用时回退到已安装的 JRE。 --explicit_server_javabase 可用于选择显式 JRE 运行 Bazel 的方法

--batch

批处理模式导致 Bazel 不使用 标准客户端/服务器模式,但运行 bazel 单个命令的 java 进程,该进程已用于提高可预测性。 与信号处理、作业控制和环境相关的语义, 变量继承,并且是在 chroot 监狱中运行 bazel 所必需的。

批处理模式在同一 output_base 内保留适当的队列语义。 也就是说,同时进行的调用将按顺序处理,而不会出现重叠。 如果批处理模式 Bazel 在具有正在运行的服务器的客户端上运行,它首先 在处理命令之前终止服务器。

在批处理模式下,或者采用上述替代方案时,Bazel 的运行速度会变慢。 这是因为构建文件缓存是驻留在内存中的,因此不是 。 因此,在性能不佳的情况下, 不太重要,例如持续构建。

--max_idle_secs=n

此选项指定 Bazel 服务器进程的运行时长(以秒为单位) 应该在最后一个客户端请求之后再退出。通过 默认值为 10800(3 小时)。--max_idle_secs=0 会导致 Bazel 服务器进程永久保留。

调用 Bazel 的脚本可以使用此选项,以确保 他们不会在用户的计算机上留下 Bazel 服务器进程 否则不会运行 例如,提交前脚本可能希望 调用 bazel query 以确保用户的待处理 不会引入不需要的依赖项。但是,如果 如果用户没有在该工作区中完成最近的构建, 提交前脚本启动 Bazel 服务器 让该设备在当天剩下的时间里保持空闲状态。 通过在--max_idle_secs 则脚本可以确保如果它引发了新的查询请求, 就会立即退出 已经有一个服务器正在运行,该服务器将继续运行 直到它在常规时间处于空闲状态为止当然,现有的 服务器的空闲计时器将会重置。

--[no]shutdown_on_low_sys_mem

启用后,如果将--max_idle_secs设为正时长, 在构建服务器空闲一段时间后, 内存不足。仅 Linux。

除了运行与 max_idle_secs 对应的空闲检查外,构建服务器还会 在服务器空闲一段时间后开始监控可用的系统内存。 如果可用的系统内存严重不足,服务器将退出。

--[no]block_for_lock

启用后,Bazel 命令将会等待 服务器锁定,然后才能继续游戏。停用后,Bazel 将 如果不能立即获取锁,并且 继续。

开发者可以在提交前检查中使用此字段,以避免长时间等待 运行容器。

--io_nice_level=n

设置一个 0 到 7 之间的级别,以便尽可能地安排 IO。0 为最高优先级, 7 表示最低。预期调度程序最多只能遵循优先级 4。 负值会被忽略。

--batch_cpu_scheduling

对 Bazel 使用 batch CPU 调度。此政策适用于 非交互式工作负载,但又不想降低其“Nice”的值。 请参阅“man 2 sched_setscheduler”。此政策有助于改进系统 以牺牲 Bazel 吞吐量为代价来实现可交互性。

其他选项

--[no]announce_rc

控制 Bazel 是否公布从 bazelrc 文件读取的命令选项 启动。(系统会无条件公布启动选项。)

--color (yes|no|auto)

此选项决定了 Bazel 是否会使用颜色突出显示 输出的内容

如果此选项设置为 yes,则会启用颜色输出。 如果此选项设置为 auto,则 Bazel 仅会在以下情况下使用颜色输出: 输出将发送到终端和 TERM 环境变量 设置为 dumbemacsxterm-mono 以外的值。 如果此选项设为 no,系统会停用颜色输出, 无论输出是否发送至终端 TERM 环境变量的设置部分。

--config=name

选择“其他配置”部分 RC 文件;当前command, 如果存在此类部分,它还会从 command:name 中提取选项。可以是 指定多个配置部分中的标志。扩展可以引用 定义(例如,可以链接展开)。

--curses (yes|no|auto)

此选项决定了 Bazel 是否会使用光标控件 输出内容。这样可以减少滚动数据 简单易懂的 Bazel 输出流。这种方法适用于 --color

如果此选项设置为 yes,则启用光标控件。 如果此选项设为 no,系统会停用光标控件。 如果此选项设为 auto,将使用光标控件 在与 --color=auto 相同的条件下启用。

--[no]show_timestamps

如果已指定,则会为通过 用于指定消息显示时间的 Bazel。