Blade - 腾讯开源的构建系统 c/c++编译环境

Blade是由腾讯台风云计算平台推出的开源构建系统,专注于C/C++项目,强调快速编译和多语言支持。它提供并行编译、依赖管理、静态代码审查等功能,旨在提升软件构建效率和质量。Blade的简洁语法和模块化设计使其易于使用和维护,适合大型项目。此外,Blade还集成了单元测试和性能测试,确保代码质量。如果你正在寻找一个强大的构建工具,Blade值得一试。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                typhoon-blade

Blade is an advanced building system developed with python, majorly for C/C++

Blade 是一个现代构建系统,期望的目标是强大而好用,把程序员从构建的繁琐中解放出来。

Blade主要定位于linux下的大型C++项目,密切配合研发流程,比如单元测试,持续集成,覆盖率统计等。但像unix下的文本过滤程序一样,保持相对的独立性,可以单独运行。目前重点支持i386/x86_64 Linux,未来可以考虑支持其他的类unix系统。

在腾讯公司“台风”云计算平台开发过程中,为了解决 GNU Make,Autotools 的难用和繁琐的问题,我们开发了这个全新的构建系统,整个系统基于多个声明式的构建脚本,在构建脚本里,只需要声明要构建什么目标,目标的源代码,以及其直接依赖的其他目标,不需要说明如何构建。大大降低了使用难度,提高了开发效率。

首先,Blade解决了依赖问题。 当你在构建某些目标时,头文件有变化,会自动重新构建。 最方便的是,Blade也能追踪库文件的依赖关系。比如 库 foo 依赖库 common,那么在库 foo 的 BUILD 文件中列入依赖:

  1. cc_library(
  2.     name = 'foo',
  3.     srcs = ...
  4.     deps = ':common'
  5. )
复制代码
那么对于使用foo的程序,如果没有直接用到common,那么久只需要列出foo,并不需要列出common。

  1. cc_binary(
  2.     name = 'my_app',
  3.     srcs = ...
  4.     deps = ':foo'
  5. )
复制代码
这样当你的库实现发生变化,增加或者减少库时,并不需要通知库的用户一起改动,Blade自动维护这层间接的依赖关系。当构建my_app时,也会自动检查foo和common是否也需要更新。

说道易用性,除了依赖关系的自动维护,Blade还可以做到,只要一行命令,就能把整个目录树的编译连接单元测试就可以全部搞定。例如:

递归构建和测试common目录下所有的目标
  1. $ blade test common...
复制代码
以32位模式构建和测试
  1. $ blade test -m32 common...
复制代码
以调试模式构建和测试
  1. $ blade test -pdebug common...
复制代码
显然,你可以组合这些标志
  1. $ blade test -m32 -pdebug common...
复制代码
特点

          自动分析头文件依赖关系,构建受影响的代码。
          增量编译和链接,只构建因变更受影响而需要构建的。
          自动计算库的间接依赖,库的作者只需要写出直接依赖,构建时自动检查所依赖的库是否需要重新构建。
          在任意代码树的任意子目录下都能构建。
          支持一次递归构建多个目录下的所有目标,也支持只构建任意的特定的目标。
          无论构建什么目标,这些目标所依赖的目标也会被自动连坐更新。
          内置 debug/release 两种构建类型。
          彩色高亮构建过程中的错误信息。
          支持 ccache
          支持 distcc
          支持基于构建多平台目标
          支持构建时选择编译器(不同版本的gcc,clang等)
          支持编译 protobuf,lex, yacc, swig
          支持自定义规则
          支持测试,在命令行跑多个测试
          支持并行测试(多个测试进程并发运行)
          支持增量测试(无需重新运行的测试程序自动跳过)
          集成 gperftools,自动检测测试程序的内存泄露
          构建脚本 vim 语法高亮
          svn 式的子命令命令行接口。
          支持 bash 命令行补全
          用 Python 编写,无需编译,直接安装使用。

彻底避免以下问题:


  • 头文件更新,受影响的模块没有重新构建。
    被依赖的库需要更新,而构建时没有被更新,比如某子目录依赖遥远的某外部目录的代码,我在这个目录构建,外部目录的代码会被自动检查是否也需要重新构建。

致谢
Blade 是受 Google 官方博客发表的这篇文章的思想的启发而开发的: 云构建:构建系统是如何工作的

现阶段 Blade 生成 SCons 脚本进行构建,因此 Blade 的运行还需要依赖 SCons。

Python 是一种简单易用而又强大的语言,我们喜欢 Python。

Google 开放的一些库强大而好用,我们很喜欢,我们把对这些库的支持集成进了Blade中,既方便了库的使用,又增强了 Blade,这些库包括 protobuf,gtest, gproftools。

更多文档请参考 Wiki。

欢迎使用以及帮助我们改进Blade,我们期待你的贡献。

GAE 地址:http://code.google.com/p/typhoon-blade/

GitHub 地址:https://github.com/chen3feng/typhoon-blade




刀是什么样的刀?

诸位看到标题,千万不要以为我是模仿《锋利的JQuery》,或者什么书籍,而是因为,介绍Blade的文章,标题不得不这样。

Blade由腾讯台风云计算平台出品,大约在2012年下半年开源,它是一把专用于构建软件的宝刀。Blade的字面意义应该是"刀锋",意思是使用该软件构建软件更加强大,更加便捷。该系列宝刀,最早应该是由Google这位顶级刀匠打造而成,当年事迹见诸互联网记载:

http://google-engtools.blogspot.hk/2011/08/build-in-cloud-how-build-system-works.html

http://mike-bland.com/2012/10/01/tools.html#tools-blaze-forge-srcfs-objfs

 

听说Google内部打磨的宝刀,其名为"火焰刀",英文名为"Blaze",一样是锋芒毕露,炙热灼物,其面世后,以其熊熊烈焰,统一了google内部的软件编译方式。腾讯出品的blade, 英文写法,只有一字之差,不过"火焰""刀锋"各得风流,虽说取名有点像偶像致敬的意思,但是也是锋芒不让。

 

提起google的宝刀,其实到google洗练过几年武学的IT牛人们,在远走他方后,也都各自打磨了一把。我的前东家,就成绩打磨过一把类似的宝剑,取名"Ymake",名字是虽然朴拙了一些,但是假如你见过他们亮出过宝刀,也会被其锋芒所吸引。在云壤的江湖朋友们,都称道其"活儿好"。

 

就互联网上能搜索到的铸刀秘诀而言,我能搜索到的,应该是我的前任授业恩师放出去的,其实他应该还没有加入云壤。项目地址为:

https://code.google.com/p/qa52/

其BUILD语法,虽然还没有简洁到极致,但是功能上似乎看起来也已经有模有样。

 

其示例的BUILD文件如下所示:

假如你仔细瞅瞅,会发现语法已经基本接近google开放出来的BUILD文件示例。

 

好吧,花了九牛二虎之力,追溯了blade的历史掌故,却还没点到题上。言归正传,blade其实是一个多语言的构建工具,之所以使用"构建",而不是"编译"两字,实在是因为软件构建并不仅仅是软件编译,而非我喜欢故弄玄虚。Blade除了编译软件以外,还奉上了很多其它的福利,比如集成了单元测试,性能测试等。这正如一把好刀,不仅应该能杀人,还且最好能力最短的时间内杀死对方,刀光一起,人已倒地,但是刀不流血,刀已回鞘。

 

那么,Blade藏身何处,不急,以下就是它的所在:

https://code.google.com/p/typhoon-blade/

https://github.com/chen3feng/typhoon-blade

目前该项目与陈峰维护,其微博名为"陈三丰",虽然我猜测可能是由于"陈峰"这个名字已经被他人抢先使用,

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值