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。下载并安装 Bazel。
设置项目工作区,这是一个 目录,Bazel 会在其中查找构建输入和
BUILD文件,并存储构建输出。编写
BUILD文件,该文件会告知 Bazel 要构建的内容以及构建方式。您可以使用 Starlark(一种领域专用语言)声明构建目标来编写
BUILD文件。(请参阅此处的示例 here)构建目标指定 Bazel 将构建的一组输入工件以及 其依赖项、Bazel 将用于构建它的构建规则,以及用于配置构建规则的选项 。
构建规则指定 Bazel 将使用的构建工具(例如编译器和 链接器)及其配置。Bazel 附带了许多构建规则 涵盖了受支持平台上的受支持语言中最常见的工件类型。
从命令行运行 Bazel。Bazel 会将输出放置在工作区内。
除了构建之外,您还可以使用 Bazel 运行 测试和查询构建 ,以跟踪代码中的依赖项。
Bazel 构建流程
运行构建或测试时,Bazel 会执行以下操作:
由于所有之前的构建工作都已缓存,因此 Bazel 可以识别并重复使用缓存的 工件,并且仅重新构建或重新测试已更改的内容。为了进一步确保 正确性,您可以将 Bazel 设置为通过沙盒以密封方式运行构建和测试 ,从而最大限度地减少偏差 并最大限度地提高 可重现性。
操作图
操作图表示构建工件、它们之间的关系, 以及 Bazel 将执行的构建操作。借助此图,Bazel 可以 跟踪文件内容的更改以及操作的更改(例如构建或测试命令),并 了解之前已完成的构建工作。借助该图,您还可以 轻松 跟踪代码中的依赖项。
入门教程
如需开始使用 Bazel,请参阅入门,或直接 跳转到 Bazel 教程: