██████╗ ██╗ █████╗ ██████╗ ███████╗
██╔══██╗██║ ██╔══██╗██╔══██╗██╔════╝
██████╔╝██║ ███████║██║ ██║█████╗
██╔══██╗██║ ██╔══██║██║ ██║██╔══╝
██████╔╝███████╗██║ ██║██████╔╝███████╗
╚═════╝ ╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝
Blade是一个方便易用高性能的现代化代码构建系统,特别适合公司内的大规模代码库的敏捷构建,内置了对多种编程语言及单元测试框架的直接支持。
Blade is an easy-to-use, fast and modern build system for trunk based development in large scale monorepo codebase. It supports building mulitiple programming languages.
English | 简体中文
我们先来看一个漂亮的演示:
master 分支上的代码是开发版,应当视为 alpha 版。正式环境请优先考虑使用 tag 上的版本。我们会不定期地把内部大规模代码库上验证过的版本发布到 tag 上。
具体请查看升级说明。
Blade 是一个现代构建系统,期望的目标是强大而好用,把程序员从构建的繁琐中解放出来。
Blade主要定位于linux下的大型C++项目,密切配合研发流程,比如单元测试,持续集成,覆盖率统计等。 但像unix下的文本过滤程序一样,保持相对的独立性,可以单独运行。目前重点支持i386/x86_64 Linux,未来可以考虑支持其他的类Unix系统。
在腾讯公司“台风”云计算平台开发过程中,为了解决 GNU Make, Autotools 的难用和繁琐的问题,参考Google工程博客上的一些文章,我们开发了这个全新的构建系统,整个系统基于多个声明式的构建脚本,在构建脚本里, 只需要声明要构建什么目标,目标的源代码,以及其直接依赖的其它目标,不需要说明如何构建。大大降低了使用难度,提高了开发效率。
2012年,Blade对外开源,成为腾讯公司最早的开源项目。目前已经广泛应用于腾讯广告系统、微信后台服务、腾讯游戏后台服务、腾讯基础架构,以及小米,百度,爱奇艺等其他公司,也收到了来自公司内外的多个Pull Requests。
代码开源后,托管到googlecode上,因后来googlecode关闭,迁移到chen3feng个人git仓库继续维护。
首先,Blade解决了依赖问题。 当你在构建某些目标时,头文件有变化,会自动重新构建。 最方便的是,Blade也能追踪库文件的依赖关系。比如 库 foo 依赖库 common,那么在库 foo 的 BUILD 文件中列入依赖:
cc_library(
name = 'foo',
srcs = ...,
hdrs = ...,
deps = ':common'
)
那么对于使用foo的程序,如果没有直接用到common,那么就只需要列出foo,并不需要列出common。
cc_binary(
name = 'my_app',
srcs = ...,
deps = ':foo'
)
这样当你的库实现发生变化,增加或者减少库时,并不需要通知库的用户一起改动,Blade自动维护这层间接的依赖关系。当构建my_app时,也会自动检查foo和common是否也需要更新。
说到易用性,除了依赖关系的自动维护,Blade还可以做到,用户只需要敲一行命令,就能把整个目录树的编译链接和单元测试全部搞定。例如:
递归构建和测试common目录下所有的目标
blade test common...
以32位模式构建和测试
blade test -m32 common...
以调试模式构建和测试
blade test -pdebug common...
显然,你可以组合这些标志
blade test -m32 -pdebug common...
彻底避免以下问题:
看到这里,你应该觉得Blade是个不错的工具,那么,阅读完整文档,开始使用吧。
如果遇到有问题,可以试试先查一下FAQ,也许有你需要的信息。
bazel
的新名字开源。我们的理念:解放程序员,提高生产力。用工具来解决非创造性的技术问题。
欢迎使用以及帮助我们改进Blade,我们期待你的贡献。