BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Google开源构建工具Bazel

| 作者 曹知渊 关注 1 他的粉丝 发布于 2015年3月28日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Google日前开源了他们内部使用的构建工具Bazel

Bazel是一个类似于Make的工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件。它的功能有诸多亮点:

  • 多语言支持:目前Bazel默认支持Java、Objective-C和C++,但可以被扩展到其他任何变成语言。
  • 高级构建描述语言:项目是使用一种叫BUILD的语言来描述的,它是一种简洁的文本语言,它把一个项目视为一个集合,这个集合由一些互相关联的库、二进制文件和测试用例组成。相反,像Make这样的工具,需要去描述每个文件如何调用编译器。
  • 多平台支持:同一套工具和相同的BUILD文件可以用来为不同的体系结构构建软件,甚至是不同的平台。在Google,Bazel被同时用在数据中心系统中的服务器应用和手机端的移动应用上。
  • 可重复性:在BUILD文件中,每个库、测试用例和二进制文件都需要明确指定它们的依赖关系。当一个源码文件被修改时,Bazel凭这些依赖来判断哪些部分需要重新构建,以及哪些任务可以并行进行。这意味着所有构建都是增量的,并且相同构建总是产生一样的结果。
  • 可伸缩性:Bazel可以处理大型项目;在Google,一个服务器软件有十万行代码是很常见的,在什么都不改的前提下重新构建这样一个项目,大概只需要200毫秒。

对于为什么要重新发明一个构建工具而不直接使用Make,Google认为Make控制得太细,最终的结果完全依靠开发人员能正确编写规则。很久以前,Google使用自动生成的臃肿的Makefile来构建他们的软件,速度太慢,结果不可靠,最终影响了研发人员的效率和公司的敏捷性。所以他们做了Bazel。Bazel的规则层次更高,比如,对于“Java测试”、“C++二进制文件”,它都有定义好的内建规则,而这些规则都已经被无数的测试证明是正确和稳定的。

另外,Bazel也有扩展机制,通过这种机制,开发者可以自己添加其他各种语言的构建规则,比如Python

Bazel的代码目前已经托管在GitHub上,感兴趣的读者也可以通过Bazel的主页了解更多信息。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT