Bazel 是一款类似于 Make、Maven 和 Gradle 的开源构建和测试工具。它使用人类可读的高级 build 语言。Bazel 支持多种语言的项目,并可构建适用于多个平台的输出。Bazel 支持跨多个代码库的大型代码库,以及大量用户。
优势
Bazel 具有以下优势:
- 高级构建语言。Bazel 使用一种抽象的、人类可读的语言,在较高的语义级别上描述项目的 build 属性。与其他工具不同,Bazel 基于库、二进制文件、脚本和数据集等概念运行,可让您免于编写对编译器和链接器等工具的各个调用的复杂性。 
- Bazel 快速且可靠。Bazel 会缓存之前完成的所有工作,并跟踪文件内容和 build 命令的更改。这样,Bazel 就能知道何时需要重新构建某些内容,并仅重新构建这些内容。为了进一步加快 build 速度,您可以将项目设置为以高度并行和增量方式进行 build。 
- Bazel 是多平台工具。Bazel 可在 Linux、macOS 和 Windows 上运行。Bazel 可以从同一项目为多个平台(包括桌面设备、服务器和移动设备)构建二进制文件和可部署的软件包。 
- Bazel 可扩缩。在处理包含 10 万多个源文件的 build 时,Bazel 仍能保持敏捷性。它适用于数万个代码库和用户群。 
- Bazel 具有可扩展性。支持多种语言,您可以扩展 Bazel 以支持任何其他语言或框架。 
使用 Bazel
如需使用 Bazel 构建或测试项目,您通常需要执行以下操作:
- 设置 Bazel。下载并安装 Bazel。 
- 设置项目工作区,这是一个目录,Bazel 会在其中查找 build 输入和 - BUILD文件,并存储 build 输出。
- 编写 - BUILD文件,告知 Bazel 要构建什么以及如何构建。- 您可以使用领域专用语言 Starlark 声明 build 目标,从而编写 - BUILD文件。(请参阅此处的示例。)- build 目标指定了一组 Bazel 将构建的输入制品及其依赖项、Bazel 将用于构建它的 build 规则,以及用于配置 build 规则的选项。 - 构建规则用于指定 Bazel 将使用的构建工具(例如编译器和链接器)及其配置。Bazel 随附了许多构建规则,涵盖了受支持语言在受支持平台上的最常见制品类型。 
- 从命令行运行 Bazel。Bazel 会将输出内容放置在工作区内。 
除了构建之外,您还可以使用 Bazel 运行测试和查询构建,以跟踪代码中的依赖项。
Bazel 构建流程
运行 build 或测试时,Bazel 会执行以下操作:
由于所有之前的 build 工作都已缓存,因此 Bazel 可以识别并重用缓存的制品,并且仅重新 build 或重新测试已更改的内容。为了进一步确保正确性,您可以设置 Bazel 通过沙盒以封闭方式运行 build 和测试,从而最大限度地减少偏差并最大限度地提高可重现性。
动作图
操作图表示 build 制品、它们之间的关系以及 Bazel 将执行的 build 操作。借助此图,Bazel 可以跟踪文件内容的变化以及操作(例如 build 或 test 命令)的变化,并了解之前已完成的 build 工作。您还可以通过该图表轻松跟踪代码中的依赖项。
入门教程
如需开始使用 Bazel,请参阅入门,或直接跳转到 Bazel 教程: