_
| |
__ _ ___| |__ _ _ ___
/ _` / __| '_ \| | | |/ _ \
| (_| \__ \ |_) | |_| | __/
\__, |___/_.__/ \__, |\___|
| | __/ |
|_| |___/
保命声明:笔者代码能力有限,若行文中有错漏之处欢迎大家指出。
Blade-build(刀片统一构建系统)
[https://github.com/chen3feng/blade-build]
Blade是一个方便易用高性能的现代化代码构建系统,特别适合公司内的大规模代码库的敏捷构建,内置了对多种编程语言及单元测试框架的直接支持。
Blade 是一个现代构建系统,期望的目标是强大而好用,把程序员从构建的繁琐中解放出来。
Blade主要定位于linux下的大型C++项目,密切配合研发流程,比如单元测试,持续集成,覆盖率统计等。
Blade解决了依赖问题。
当你在构建某些目标时,头文件有变化,会自动重新构建。
最方便的是,Blade也能追踪库文件的依赖关系。
说到易用性,除了依赖关系的自动维护,Blade还可以做到,用户只需要敲一行命令,就能把整个目录树的编译链接和单元测试全部搞定
比如库 foo 依赖库 common,那么在库 foo 的 BUILD 文件中列入依赖.
特性:
- 自动分析头文件依赖关系,构建受影响的代码。
- 增量编译和链接,只构建因变更受影响而需要重新构建的代码。
- 自动计算库的间接依赖,库的作者只需要写出直接依赖,构建时自动检查所依赖的库是否需要重新构建。
- 在任意代码树的任意子目录下都能构建。
- 支持一次递归构建多个目录下的所有目标,也支持只构建任意的特定的目标。
- 无论构建什么目标,这些目标所依赖的目标也会被自动连坐更新。
- 内置 debug/release 两种构建类型。
- 彩色高亮构建过程中的错误信息。
- 支持 ccache
- 支持 distcc
- 支持基于构建多平台目标
- 支持构建时选择编译器(不同版本的gcc,clang等)
- 支持编译 protobuf,lex, yacc, swig
- 支持自定义规则
- 支持测试,在命令行跑多个测试
- 支持并行测试(多个测试进程并发运行)
- 支持增量测试(无需重新运行的测试程序自动跳过)
- 集成 gperftools,自动检测测试程序的内存泄露
- 构建脚本 vim 语法高亮
- svn 式的子命令命令行接口。
- 支持 bash 命令行补全
- 用 python 编写,无需编译,直接安装使用。
彻底避免以下问题:
- 头文件更新,受影响的模块没有重新构建。
- 被依赖的库需要更新,而构建时没有被更新,比如某子目录依赖
快速上手
构建项目目录
- 在项目根目录新建BLADE_ROOT文件
- 新建BUILD文件
BUILD
cc_binary(
name='blade-test', #目标名
srcs=[
'main.c'
] #源代码集合
)
构建
main.c
#include <stdio.h>
int main(void){
printf("blade test\n");
return 0;
}
编译:
#添加blade到环境变量
export PATH=$PATH:/Users/workspace/Desktop/blade_test/blade-build-master
cd 项目根目录
export BLADE_CACHE_DIR=$PWD
blade build