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