Bazel 简介

Bazel 是一种开源构建和测试工具,类似于 Make、Maven 和 Gradle。 它使用人类可读的高级构建语言。Bazel 支持多种语言的项目,并为多个平台构建输出。Bazel 支持跨多个代码库的大型代码库,以及大量用户。

福利

Bazel 具有以下优势:

  • 高级构建语言。Bazel 使用抽象的、人类可读的语言,在较高的语义级别描述项目的构建属性。与其他工具不同,Bazel 针对库、二进制文件、脚本和数据集的概念运行,让您无需编写对编译器和链接器等工具的各个调用,从而避免了复杂性。

  • Bazel 快速且可靠。Bazel 会缓存所有之前完成的工作,并跟踪文件内容和构建命令的更改。这样,Bazel 就能知道何时需要重新构建某些内容,并且只会重新构建这些内容。如需进一步加快构建速度,您可以将项目设置为以高度并行和增量方式进行构建。

  • Bazel 是多平台的。Bazel 可在 Linux、macOS 和 Windows 上运行。Bazel 可以从同一项目为多个平台(包括桌面设备、服务器和移动设备)构建二进制文件和可部署软件包。

  • Bazel 可扩缩。Bazel 在处理包含 10 万多个源文件的构建时,仍能保持敏捷性。它适用于多个代码库和数万个用户群。

  • Bazel 可扩展。Bazel 支持多种 语言,您可以扩展 Bazel 以支持任何其他语言或 框架。

使用 Bazel

如需使用 Bazel 构建或测试项目,您通常需要执行以下操作:

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

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

  3. 编写 BUILD 文件,该文件会告知 Bazel 要构建的内容以及构建方式 。

    您可以使用 Starlark(一种领域专用语言)声明构建目标来编写 BUILD 文件。(请参阅 此处的 示例

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

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

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

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

Bazel 构建流程

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

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

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

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

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

操作图

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

入门教程

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