为何选择 Bazel?

Bazel 是一款 快速正确可扩展 的构建工具,具有 集成测试功能,可在行业领先的 生态系统中支持多种 语言代码库平台

Bazel 速度很快

Bazel 确切知道每个构建命令需要哪些输入文件,因此仅当每两个构建之间的输入文件集发生更改时才会重新运行,从而避免不必要的工作。它会尽可能并行地运行构建命令, 无论是在同一台计算机上还是在远程构建 节点上。如果构建的结构允许,它可以同时运行数千个构建或测试命令。

如果可用,内存、磁盘和远程构建场中会提供多个缓存层来支持此功能。在 Google,我们通常可以实现超过 99% 的缓存命中率。

Bazel 是正确的

Bazel 可确保您的二进制文件仅通过您自己的源代码构建。 Bazel 操作在各个沙盒中运行,并且 Bazel 会跟踪构建的每个输入文件,仅在需要时重新运行构建命令。这样可以确保您的二进制文件保持最新状态,以便相同的源代码始终生成 相同的二进制文件,并且逐位相同。

告别没完没了的 make clean 调用,告别追逐实际上已在从未构建的源代码中解决的虚假 bug。

Bazel 是可扩展的

通过编写自己的规则和宏,充分利用 Bazel 的强大功能,针对各种项目的特定需求自定义 Bazel。

Bazel 规则使用 Starlark 编写,Starlark 是我们的 内部编程语言,是 Python 的子集。Starlark 使大多数开发者都可以编写规则,同时还可以创建可在整个生态系统中使用的规则。

集成测试

Bazel 的 集成测试运行程序 仅知道并运行需要重新运行的测试,并使用远程执行(如果 可用)并行运行这些测试。通过使用远程执行快速运行数千次测试,尽早检测出不稳定的测试。

Bazel 提供将测试结果上传到中心位置的功能,从而方便高效地沟通测试 结果,无论是在 CI 上还是由各个开发者进行。

多语言支持

Bazel 支持许多常见的编程语言,包括 C++、Java、Kotlin、Python、Go 和 Rust。您可以在同一 Bazel 调用中构建多个二进制文件(例如后端、Web 界面和移动应用),而不会受到一种语言的惯用构建工具的限制。

多代码库支持

Bazel 可以从多个位置收集源代码:您无需提供依赖项(但您可以这样做!),而是可以将 Bazel 指向源代码或预构建工件(例如 Git 代码库或 Maven Central)的位置,其余工作由 Bazel 完成。

多平台支持

Bazel 可以同时为多个平台(包括 Linux、macOS、Windows 和 Android)构建项目。它还提供强大的交叉编译 功能,可以在一个 平台上构建代码,同时在另一个平台上运行构建。

广泛的生态系统

行业领导者喜欢 Bazel,并建立了一个庞大的 开发者社区,他们使用 Bazel 并为 Bazel 做出贡献。查找工具、服务 和文档,包括 Bazel 可以使用的咨询和 SaaS 产品。探索扩展程序 ,例如在我们的开源软件 代码库中支持编程语言