新用到的一个c++项目编译构建工具---blade

在linux平台,之前makefile,cmake.... 各类难用和繁琐python

 

blade 听说是腾讯搞出来的,好吧还不错,企鹅继续加油! 采用python开发的。linux

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

cc_library(bash

     name  = 'foo' ,
     srcs  = ...
     deps  = ':common'
)

那么对于使用foo的程序,若是没有直接用到common,那么久只须要列出foo,并不须要列出common。并发

 cc_binary(app

     name  = 'my_app' ,
     srcs  = ...
     deps  = ':foo'
)

这样当你的库实现发生变化,增长或者减小库时,并不须要通知库的用户一块儿改动,Blade自动维护这层间接的依赖关系。当构建my_app时,也会自动检查foo和common是否也须要更新。svn

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

递归构建和测试common目录下全部的目标测试

$ blade test common...

以32位模式构建和测试spa

$ blade test -m32 common...

以调试模式构建和测试

$ blade test -pdebug common...

显然,你能够组合这些标志

$ blade test -m32 -pdebug common...

特色

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

    完全避免如下问题:

    • 头文件更新,受影响的模块没有从新构建。
    • 被依赖的库须要更新,而构建时没有被更新,好比某子目录依赖遥远的某外部目录的代码,我在这个目录构建,外部目录的代码会被自动检查是否也须要从新构建。
相关文章
相关标签/搜索