写点什么

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

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

关注

评论

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

架构师训练营-第一节

Geek_af3d01

ChaosBlade:从零开始的混沌工程(一)

郭旭东

云原生 混沌工程

原创 | TDD工具集:JUnit、AssertJ和Mockito (十八)编写测试-测试执行顺序\嵌套的测试

编程道与术

Java 编程 TDD 单元测试 JUnit

别再说你不懂Linux内存管理了,10张图给你安排的明明白白

程序员柠檬

Linux 后台开发

不同层次格局的差异

kimmking

使用Nginx防止IP地址被恶意解析

Noneplus

nginx 恶意解析

绝对坦诚:打造团队自我进化能力的最佳姿势

伴鱼技术团队

团队管理 企业文化 团队协作 技术管理 文化

地摊经济一千年:从《韩熙载夜宴图》到木屋烧烤“撸串”

punkboy

产品经理 商业 新闻动态 新基建 地摊

2020.06.04,我在《架构师训练营》的学习历程:架构方法

程序员二师兄

极客大学架构师训练营

ARTS-week1

书生

RUST IN BLOCKCHAIN 五月简报

Aimee 阿敏

rust crypto blockchain

Vue&SpringBoot前后端项目分离构建

夏悸

Spring Boot Vue 大前端

六处提及区块链!海南自贸港区块链产业应用先行,与“币”划清界限

CECBC

区块链技术 海南方案 严控 产业

ARTS - Week 2

Khirye

ARTS 打卡计划 arts

极客大学架构师训练营 听课总结 -- 第一课

John(易筋)

极客时间 架构 极客大学 架构师 极客大学架构师训练营

【写作群星榜】5.29~6.4写作平台优秀作者&文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

分布式场景之刚性事务-2PC详解

奈学教育

分布式 2PC

有时候爱也是一种负担

小天同学

日常思考 爱情 个人感悟

CDN百科第三讲 | 如果用了云服务器,还需要做CDN加速吗?

阿里云Edge Plus

CDN

9种 分布式ID生成方案,我替你整理好了

程序员小富

Java MySQL 分布式

白话说流——什么是流,从批认识流(一)

KAMI

大数据 flink 流计算

初识软件架构

陈皮

Architecture Architect

重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)

小傅哥

设计模式 小傅哥 重构 代码质量 桥接模式

不到100行代码的iOS组件化你怕了么?

Geek_i59t1w

ios 组件化 url scheme scheme

我的编程之路 -7(T型人才)

顿晓

T型人才 编程之路

自学技术看这些网站就够了!

我是程序员小贱

学习

观察者模式——窥探JDK和Spring中的设计模式

大头星

spring jdk 面试 设计模式 Java 25 周年

装饰模式——看JDK和Spring是如何杜绝继承滥用的

大头星

Java spring jdk 面试 设计模式

人人都能看懂的 6 种限流实现方案!(纯干货)

王磊

Java 「Java 25周年」 Java 25 周年

分布式事务 - 分布式事务框架Seata

Java收录阁

分布式事务

如果我能找到工作,那么你也行

escray

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