首页 > 其他分享 >使用Blade-build编译小记

使用Blade-build编译小记

时间:2023-01-30 13:44:16浏览次数:57  
标签:__ blade Blade 依赖 构建 build 小记

           _                
          | |               
  __ _ ___| |__  _   _  ___ 
 / _` / __| '_ \| | | |/ _ \
| (_| \__ \ |_) | |_| |  __/
 \__, |___/_.__/ \__, |\___|
    | |           __/ |     
    |_|          |___/      

保命声明:笔者代码能力有限,若行文中有错漏之处欢迎大家指出。

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 编写,无需编译,直接安装使用。

彻底避免以下问题:

  • 头文件更新,受影响的模块没有重新构建。
  • 被依赖的库需要更新,而构建时没有被更新,比如某子目录依赖

快速上手

json文件

构建项目目录

  1. 在项目根目录新建BLADE_ROOT文件
  2. 新建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 

效果

标签:__,blade,Blade,依赖,构建,build,小记
From: https://www.cnblogs.com/qsbye/p/17075643.html

相关文章

  • openwrt_imagebuilder_修改缺省配置_network_firewall_root密码
    openwrt_imagebuilder_修改缺省配置_network_firewall_root密码转载注明来源:本文链接来自osnosn的博客,写于2023-01-29.参考和方法【官方文档:使用ImageBuilder】......
  • python-Couldn‘t find a tree builder with the features you requested: lxml
    执行BeautifulSoup(content,features='lxml')时报错,按照网上的方法安装lxml、重新安装lxml、安装指定版本lxml,都无效。最后发现只是PyCharm设置中project的pyth......
  • Source Insight 4.0 常用快捷键小记
    1、括号配对高亮:“在前括号左侧,后括号左侧”双击鼠标左键,可以选定匹配括号和其中内容(<>,(),L{R},[]之间) 高亮当前单词:F8语法窗口(隐藏/显示语法窗口):Alt+F8......
  • 最小表示法学习小记
    定义循环同构串——当字符串S中选定一个位置i满足S[i~n]+S[1-i-1]=T,最小表示发用来找到字符串中最小字典序的循环同构串。类似KMP的思想。先破环成链,然后三指针比较。重点......
  • 0124 训练小记
    0124训练小记ARC153FTri-ColoredPaths图上问题感觉我做的不多,也没什么好套的常见套路。所以考虑从特殊情形和边缘情况什么的入手。那么我们考虑环。正难则反,统计不......
  • Could not locate aapt. Please ensure you have the Android buildtools installed.E
    Flutter开发调试一直报错Couldnotlocateaapt.PleaseensureyouhavetheAndroidbuildtoolsinstalled.Exception:ProblembuildingAndroidapplication:seeab......
  • 【小记】copy 与 copy_backward
    copy与copy_backwardcopy从前往后复制,result参数指向目标容器的begin位置copy*backward从后往前复制,···end位置Possibleimplementationtemplate<class......
  • 数论小记
    $[n=1]=\sum\limits_{d|n}\mu(d)$ 若:$F(n)=\sum\limits_{d|n}f(d)$则:$f(n)=\sum\limits_{d|n}\mu(d)F(\frac{n}{d})$ 若:$F(n)=\sum\limits_{n|d}f(d)$则:$f(n)......
  • 0123 训练小记
    0123训练小记BZOJ2159Crash的文明世界把\(k\)次方用第二类斯特林数拆开,然后换根dp统计即可。时间复杂度:\(O(nk)\)。CF453ELittlePonyandLordTirek每次操......
  • Informer源码学习记录之 "模型搭建build_model"
    一、初始化1.代码结构main_informer.py:  exp=Exp(args)#setexperimentsexp_basic.py:classExp_Informer(E......