新用到的一个c++项目编译构建工具---blade
2015-04-10 09:49
1141 查看
在linux平台,以前makefile,cmake.... 各种难用和繁琐
blade 据说是腾讯搞出来的,好吧还不错,企鹅继续加油! 采用python开发的。
首先,Blade解决了依赖问题。 当你在构建某些目标时,头文件有变化,会自动重新构建。 最方便的是,Blade也能追踪库文件的依赖关系。比如 库 foo 依赖库 common,那么在库 foo 的 BUILD 文件中列入依赖:
那么对于使用foo的程序,如果没有直接用到common,那么久只需要列出foo,并不需要列出common。
这样当你的库实现发生变化,增加或者减少库时,并不需要通知库的用户一起改动,Blade自动维护这层间接的依赖关系。当构建my_app时,也会自动检查foo和common是否也需要更新。
说道易用性,除了依赖关系的自动维护,Blade还可以做到,只要一行命令,就能把整个目录树的编译连接单元测试就可以全部搞定。例如:
递归构建和测试common目录下所有的目标
以32位模式构建和测试
以调试模式构建和测试
显然,你可以组合这些标志
增量编译和链接,只构建因变更受影响而需要构建的。
自动计算库的间接依赖,库的作者只需要写出直接依赖,构建时自动检查所依赖的库是否需要重新构建。
在任意代码树的任意子目录下都能构建。
支持一次递归构建多个目录下的所有目标,也支持只构建任意的特定的目标。
无论构建什么目标,这些目标所依赖的目标也会被自动连坐更新。
内置 debug/release 两种构建类型。
彩色高亮构建过程中的错误信息。
支持 ccache
支持 distcc
支持基于构建多平台目标
支持构建时选择编译器(不同版本的gcc,clang等)
支持编译 protobuf,lex, yacc, swig
支持自定义规则
支持测试,在命令行跑多个测试
支持并行测试(多个测试进程并发运行)
支持增量测试(无需重新运行的测试程序自动跳过)
集成 gperftools,自动检测测试程序的内存泄露
构建脚本 vim 语法高亮
svn 式的子命令命令行接口。
支持 bash 命令行补全
用 Python 编写,无需编译,直接安装使用。
彻底避免以下问题:
头文件更新,受影响的模块没有重新构建。
被依赖的库需要更新,而构建时没有被更新,比如某子目录依赖遥远的某外部目录的代码,我在这个目录构建,外部目录的代码会被自动检查是否也需要重新构建。
blade 据说是腾讯搞出来的,好吧还不错,企鹅继续加油! 采用python开发的。
首先,Blade解决了依赖问题。 当你在构建某些目标时,头文件有变化,会自动重新构建。 最方便的是,Blade也能追踪库文件的依赖关系。比如 库 foo 依赖库 common,那么在库 foo 的 BUILD 文件中列入依赖:
cc_library(
那么对于使用foo的程序,如果没有直接用到common,那么久只需要列出foo,并不需要列出common。
cc_binary(
这样当你的库实现发生变化,增加或者减少库时,并不需要通知库的用户一起改动,Blade自动维护这层间接的依赖关系。当构建my_app时,也会自动检查foo和common是否也需要更新。
说道易用性,除了依赖关系的自动维护,Blade还可以做到,只要一行命令,就能把整个目录树的编译连接单元测试就可以全部搞定。例如:
递归构建和测试common目录下所有的目标
$ blade test common...
以32位模式构建和测试
$ 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 编写,无需编译,直接安装使用。
彻底避免以下问题:
头文件更新,受影响的模块没有重新构建。
被依赖的库需要更新,而构建时没有被更新,比如某子目录依赖遥远的某外部目录的代码,我在这个目录构建,外部目录的代码会被自动检查是否也需要重新构建。
相关文章推荐
- 做一个项目,平时都用到哪些工具提高效率(上)
- 做一个项目,平时都用到哪些工具提高效率(James Li)
- nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)
- Nodejs编译Native Code:使用C++构建工具npm
- 使用 Android NDK 的交叉编译工具链移植 C/C++ 项目到安卓平台
- 做一个项目,平时都用到哪些工具提高效率(上)【转】
- 做一个项目,平时都用到哪些工具提高效率(下)
- linux下eclipse构建并编译android一个简单jni项目
- 做一个项目,平时都用到哪些工具提高效率(上)
- nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)
- 做一个项目,平时都用到哪些工具提高效率(上)[转]
- 做一个项目,平时都用到哪些工具提高效率(上)
- 做一个项目,平时都用到哪些工具提高效率(下)
- linux下eclipse构建并编译android一个简单jni项目
- 做一个项目,平时都用到哪些工具提高效率(中)
- Ant 构建工具(从SVN下载项目 ,编译,到tomcat下运行项目)
- 做一个项目,平时都用到哪些工具提高效率(中)
- 做一个项目,平时都用到哪些工具提高效率(James Li)
- 使用 Android NDK 的交叉编译工具链移植 C/C++ 项目到安卓平台
- .net 网站首页,本次的项目中用到的一个网站首页中统计网页访问量的工具方法,我觉得它应该在pagebase里面,拿来用一下