大家好,今天我想给大家分享一个构建工具——Bazel。

目录

接下来我们将从以下几点来讨论。Bazel 是什么、它的前世今生、它有什么特点以及我们为什么要使用 Bazel,它的基本概念是什么,最后我会用一个简单的 iOS 示例来帮助大家理解 Bazel 的基本概念。

Bazel 是什么

Bazel 是一款由 Google 开源的,类似于 Make 、Maven、Gradle 的构建和测试工具。

左边这张图是它的 logo,右边是它支持的一些常用的语言和平台,包括 Java、Kotlin、Objective-C、Python、C++、Go、Javascript 等。

那么 Google 为什么要开源这样一款工具,或者说他们为什么要发起这样一个项目呢?

Bazel 的前世今生

这就要从这个项目的背景来讲来了,Google 曾经使用 Makefile 来进行编译构建,使用 Python 脚本进行编译阶段的描述工作,并且将 Python 的函数调用存储在 BUILD 文件中,这里大家要记住 BUILD 文件这个名词,之后还会提到。

这种编译构建方式对于 Google 这样项目极为庞大的公司来讲,速度是非常慢的。

为了解决这个问题,Blaze 应运而生了。

Blaze 项目起始于 2006 年,当然,据负责人讲,他们在 2003 年就曾构想过 Blaze 的雏形,Blaze 使用 Python 解释器来读取 BUILD 文件的描述,将其预处理为一个简化的 BUILD 文件供 Blaze 使用。但是由于 Python 宏难以维护,便创建了一个新的语言 Starlark,它的语法是 Python 的子集,这样既解决了 Python 宏难以维护的问题,同时又保证了代码迁移的便利。

大家可能会奇怪,我们不是在讲 Bazel 嘛,那 Blaze 又是什么呢,Blaze 就是 Bazel 开源前的名字,负责人在开源这个项目前,内部征集了一个多月,都没有找到一个满意的名字,一怒之下就将 Blaze 中第二个字母 l 移到最后,改名为 Bazel 了。

Bazel 在 2015 年开源,经过 29 个小的测试版,于 2019 年 10 月发布第一个稳定版 1.0,紧接着在之后的 12 月又发布了 2.0,到目前为止,在今年的 1 月发布了 4.0,它在 GitHub 上的 star 有 16.6k,提交了 30k 的 commit。

右边是一些正在使用 Bazel 的公司,包括一些我们熟知的例如:Dropbox、Uber、Huawei、Pinterest、英伟达、Spotify、Twitter、LinkedIn、IBM 等等,另外像日本的 LINE 公司,国内的流利说以及 b 站都有在使用。