写点什么

Google 开源构建工具 Bazel

  • 2015-03-27
  • 本文字数:917 字

    阅读完需:约 3 分钟

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)关注我们,并与我们的编辑和其他读者朋友交流。

2015-03-27 00:5921500
用户头像

发布了 77 篇内容, 共 36.9 次阅读, 收获喜欢 26 次。

关注

评论

发布
暂无评论
发现更多内容

云时代,好用的数据迁移方案推荐

NineData

数据库迁移 数据校验 数据复制 迁移工具 NineData

Databend Roadmap in 2023

Databend

贴合运维场景的告警聚合实现——以Zabbix为例

北海

运维 zabbix 告警 IT运维

软件测试/测试开发 | app自动化测试(Android)--App 控件交互

测试人

软件测试 自动化测试 测试开发 appium app自动化测试

分享一个 HIVE SQL 性能优化点-使用公共表表达式 CTE 替换临时表

明哥的IT随笔

hadoop hive

分层次的电路设计方法

timerring

FPGA

2K字就能理解的async/await原理,还要拖多久?

梁木由

前端 前端开发 校招 前端入门

技术管理 之 干系人管理

码猿外

技术管理 干系人管理

2022年总结及2023年规划:新起点和新希望

不脱发的程序猿

程序人生 年度总结

想找个稳定的工作

MavenTalker

职业素养 职业发展 求职面试

windows命令窗口

MEImei

应用部署初探:3个主要阶段、4种常见模式

SEAL安全

应用部署

AIGC的浪潮下,文本生成发展得怎么样了?

澜舟孟子开源社区

人工智能 文本生成 AIGC

坚持技术or转做管理,我们该如何选择?

石云升

极客时间 1月月更 技术领导力实战笔记

新范式+新标准=世界级产品|StarRocks年度总结

StarRocks

数据库

代码实例解读如何安全发布对象

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

自动驾驶汽车芯片的发展和分析

不脱发的程序猿

嵌入式 汽车电子 自动驾驶汽车芯片

比亚迪新能源汽车战略布局研究

不脱发的程序猿

汽车电子 比亚迪新能源汽车战略布局 比亚迪新能源汽车

火山引擎DataTester:0代码也能实施A/B测试的实验平台

字节跳动数据平台

大数据 AB testing实战 企业号 2 月 PK 榜

比亚迪元EV汽车拆解报告

不脱发的程序猿

嵌入式 汽车电子 比亚迪元EV汽车拆解

mockito入门

查拉图斯特拉说

后端 单元测试

1

Doctor Blind

全球首个面向遥感任务设计的亿级视觉Transformer大模型

京东科技开发者

CNN 遥感 遥感影像 企业号 2 月 PK 榜 深度视觉

面试前必刷!Java高级工程师1380道面试题(附答案)分享

架构师之道

编程 程序员 java面试

OKR之剑·实战篇04:OKR执行过程优化的那些关键事

vivo互联网技术

团队管理 OKR

《欧拉开源操作系统行业应用案例集》2023年案例集征集开始!

openEuler

Linux 操作系统 openEuler

RocketMQ源码-NameServer架构设计及启动流程

小小怪下士

Java 源码 程序员 RocketMQ

一看就懂!任务提交的资源判断在Taier中的实践

袋鼠云数栈

架构实战营第 10 期 - 模块五:微博评论高性能高可用计算架构设计

kaizen

「架构实战营」

开发互动直播应用很简单:声网 Android Demo保姆级跑通教程

声网

android RTC RTE 教程分享

BSN-DDC基础网络详解(一):基础介绍

BSN研习社

Google开源构建工具Bazel_语言 & 开发_曹知渊_InfoQ精选文章