Bazel 简介

报告问题 查看来源 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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 构建或测试项目,您通常需要执行以下操作:

  1. 设置 Bazel。下载并安装 Bazel

  2. 设置项目工作区,这是一个目录,Bazel 会在其中查找 build 输入和 BUILD 文件,并存储 build 输出。

  3. 编写 BUILD 文件,告知 Bazel 要构建什么以及如何构建。

    您可以使用领域专用语言 Starlark 声明 build 目标,从而编写 BUILD 文件。(请点击此处查看示例。)

    build 目标指定了 Bazel 将构建的一组输入制品及其依赖项、Bazel 将用于构建它的 build 规则,以及用于配置 build 规则的选项。

    build 规则用于指定 Bazel 将使用的构建工具(例如编译器和链接器)及其配置。Bazel 随附了许多构建规则,涵盖了受支持的语言在受支持的平台上的最常见制品类型。

  4. 命令行运行 Bazel。Bazel 会将输出内容放置在工作区内。

除了构建之外,您还可以使用 Bazel 运行测试查询构建,以跟踪代码中的依赖项。

Bazel 构建流程

运行 build 或测试时,Bazel 会执行以下操作:

  1. 加载与目标相关的 BUILD 文件。

  2. 分析输入及其依赖项,应用指定的 build 规则,并生成操作图。

  3. 对输入执行构建操作,直到生成最终构建输出。

由于所有之前的 build 工作都已缓存,因此 Bazel 可以识别并重用缓存的制品,并且仅重新 build 或重新测试已更改的内容。为了进一步确保正确性,您可以设置 Bazel 通过沙盒以密封方式运行 build 和测试,从而最大限度地减少偏差并最大限度地提高可重现性

动作图

操作图表示 build 制品、它们之间的关系以及 Bazel 将执行的 build 操作。借助此图,Bazel 可以跟踪文件内容的变化以及操作(例如 build 或 test 命令)的变化,并了解之前已完成的 build 工作。您还可以通过该图表轻松跟踪代码中的依赖项

入门教程

如需开始使用 Bazel,请参阅入门或直接跳转到 Bazel 教程: