Bazel 通过运行必要的编译器和测试来构建项目。该构建系统是从头开始设计的,旨在以最佳方式构建 Google 项目,包括非常大的项目以及包含多种编程语言代码、需要大量测试并且针对多个平台构建的项目。它支持用 Java、C++、Objective-C、Python、Rust、Go 和许多其他语言构建和测试代码,以及为 Android 和 iOS 构建移动应用程序。支持针对不同平台和架构使用单个程序集文件;例如,一个未经更改的程序集文件既可以用于服务器系统,也可以用于移动设备。
Bazel 的显着特点包括装配过程的高速、可靠性和可重复性。为了实现高构建速度,Bazel 在构建过程中积极使用缓存和并行化技术。 BUILD 文件必须完全定义所有依赖关系,在此基础上做出在更改后重建组件的决策(仅重建更改的文件)并并行化组装过程。工具还确保可重复组装,即在开发人员的机器上构建项目的结果将与在第三方系统(例如持续集成服务器)上构建的结果完全相同。
与 Make 和 Ninja 不同,Bazel 使用更高级别的方法来构建汇编规则,其中不是定义命令到正在构建的文件的绑定,而是使用更抽象的现成块,例如“在C++”、“用 C++ 构建库”或“运行 C++ 测试”,以及识别目标和构建平台。在 BUILD 文本文件中,项目组件被描述为一堆库、可执行文件和测试,而没有在单个文件和编译器调用命令级别进行详细说明。附加功能是通过连接扩展的机制来实现的。
来源: opennet.ru