为何选择 Bazel?

报告问题 查看源代码

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

Bazel 速度快

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

这受到内存、磁盘和远程构建农场(如果有)的多个缓存层支持。在 Google,我们通常会将缓存命中率达到 99% 以上。

Bazel 正确

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

对无休止的 make clean 调用,以及追寻实际上在从未被构建的源代码中解决的幽灵 bug 的说辞。

Bazel 具有可扩展性

自行编写规则和宏,针对各种项目的特定需求自定义 Bazel,从而充分发挥 Bazel 的功能。

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

集成测试

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

Bazel 提供了一些工具,可用于将测试结果上传到中心位置,从而有助于高效沟通测试结果,无论是在持续集成环境中还是由个人开发者进行。

多语言支持

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

多代码库支持

Bazel 可以从多个位置收集源代码:您无需提供依赖项(但可以!),只需将 Bazel 指向源代码或预构建工件(例如 Git 代码库或 Maven Central)的位置,然后它就会负责其余工作。

多平台支持

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

庞大的生态系统

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