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 可以同时为多个平台(包括 Linux、macOS、Windows 和 Android)构建项目。它还提供强大的交叉编译 功能,可以在一个 平台上构建代码,同时在另一个平台上运行构建。
广泛的生态系统
行业领导者喜欢 Bazel,并建立了一个庞大的 开发者社区,他们使用 Bazel 并为 Bazel 做出贡献。查找工具、服务 和文档,包括 Bazel 可以使用的咨询和 SaaS 产品。探索扩展程序 ,例如在我们的开源软件 代码库中支持编程语言。