写点什么

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:5921400
用户头像

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

关注

评论

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

运维进阶训练营 -W02H

赤色闪电

运维

【精彩内容分享】SoCC 2022 | 大规模云系统自动化容量评估的探索与落地 – DeepScaling

TRaaS

AI读懂中国,文心方可雕龙

脑极体

C++从入门到精通(第七篇) :string类的讲解和模拟实现

雪芙花

c 10月月更 C++

【点滴】生活模型

无人之路

个人成长 日志 模型思维

基于 docker 实现对容器的 CPU 和内存的资源限制

忙着长大#

Docker 镜像

http 协议 harbor 镜像仓库部署

忙着长大#

11:高级部分-MySQL

Yeats_Liao

数据库 后端 10月月更

C++从入门到精通(第七篇) :vector深度剖析及模拟实现

雪芙花

c 10月月更 C++

Mimir 速体验 (Part 5):原生 OTLP 数据写入

Grafana 爱好者

Grafana OpenTelemetry Mimir

【一Go到底】第三十一天---查找

指剑

Go golang 10月月更

Mimir 速体验 (Part 4):数据抓取的高可靠

Grafana 爱好者

Grafana Prometheus Mimir

服务怎么升级

agnostic

服务升级

嵌入式 Linux 入门(九、Linux 下的磁盘管理)

矜辰所致

Linux 10月月更 磁盘管理

虚拟化资源监控

阿泽🧸

10月月更 虚拟化监控

流式计算引擎对比

穿过生命散发芬芳

10月月更 流式计算

9:多表查询-MySQL

Yeats_Liao

数据库 后端 10月月更

Go语言入门09—结构体

良猿

Go golang 后端 10月月更

【笔记】面向过程的SQL扩展(一)

w010w

数据库 sql 10月月更

6000字带你揭开ICT和云计算技术的神秘面纱!

wljslmz

云计算 ICT 以太网 10月月更

Java | Collection集合的子类

陌上

Java 编程 10月月更

远程代码执行漏洞

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

QECon上海站|蚂蚁测试用例智能生成技术架构与实践

TRaaS

前端开发-初始HTML

木偶

html 前端 10月月更

JavaScript基础部分能力提升以及解答方案

木偶

JavaScript 前端 10月月更

半小时看懂互联网运营,学会做局与破局

蔡农曰

运营 互联网+ 互联网行业 互联网运营

10:子查询-MySQL

Yeats_Liao

数据库 后端 10月月更

Nest.js初步学习

木偶

Express nestjs 10月月更

极客时间运维进阶训练营第二周作业

Starry

Java | Collection集合

陌上

Java 编程 10月月更

Java | Map集合

陌上

Java 编程 10月月更

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