Bazel 简介

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

优势

Bazel 具有以下优势:

  • 高级构建语言。Bazel 使用人类可读懂的抽象语言,从高语义级别描述项目的 build 属性。与其他工具不同,Bazel 运行的是库、二进制文件、脚本和数据集的概念,可避免向编译器和链接器等工具编写单独的调用的复杂性。

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

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

  • Bazel 扩缩。在处理超过 10 万个源文件的构建时,Bazel 保持了敏捷性。它支持数万个代码库和用户群。

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

使用 Bazel

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

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

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

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

    如需编写 BUILD 文件,您可以使用 Starlark(一种网域专用语言)声明 build 目标。(请参阅此处的示例。)

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

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

  4. 通过命令行运行 Bazel。Bazel 会将您的输出放置在工作区中。

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

Bazel 构建流程

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

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

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

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

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

操作图表

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

入门教程

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