blade说明和使用

苏建安
2023-12-01

1.blade是什么?有什么优点?

(1)blade是什么
一个构建工具,根据BUILD文件构建目标,类似于make根据Makefile文件构建目标。
(2)blade优点:
先看makefile的缺点:

  • 间接依赖也需要在makefile里写明
  • 构建速度慢

blade优点:

  • 依赖自动传递,只需要写出直接依赖,间接的依赖blade为你搞定
  • 构建速度更快
  • 增量构建

2.blade怎么用

Blade 通过一系列的名字为 “BUILD” 的文件(文件名全大写),这些文件需要开发者去编写。每个 BUILD文件通过一组目标描述函数描述了一个目标的源文件,所依赖的其他目标,以及其他一些属性。
(1)项目结构

$ ls -1
BLADE_ROOT		// 在源代码的根目录下,也是项目的全局配置
common
thirdparty
xfs
your_project
...

(2)BUILD文件书写
BUILD文件写名要编译的target和target的描述,通俗理解相当于自我介绍。

使用比较多的target:cc_library、cc_binary、cc_test、proto_library。proto_library是proto buffer。

cc_library是编译成链接库,默认是静态链接库
srcs是源码,incs是增加编译源文件时的头文件查找路径,defs是用户定义的宏加入编译中deps是依赖的链接库,extra_cppflags是可以自定义的额外的C/C++编译flags。

cc_library(
    name = 'string',
    srcs = [
        'algorithm.cpp',
        'concat.cpp'
    ],
    incs = [
    	'../coommon'
    ],
    defs = ['POCO_OS_FAMILY_UNIX'],
    deps = ['//common/base:int', '#libpthread'],
    extra_cppflags = ['-std=gnu++11', '-Wno-sign-compare', '-Wno-non-virtual-dtor'],
)

风格建议:

  • incs头文件目录从根目录写起
  • 总是用单引号
  • 目标名用小写
  • src 里的文件名按字母顺序排列
  • deps 里先写本目录内的依赖(:target),后写其他目录内的(//dir:name),分别按字母顺序排列。

deps的格式:

  • ‘//path/to/dir:name’,path是从BLADE_ROOT出发的路径,name是依赖的目标库名,dir是name所在的目录
  • ':name’是当前BUILD文件内的target, path可以省略
  • '#lpthread’是系统库,直接写#跟名字即可

(3)blade命令行参数
blade build …:编译当前目录包含子目录
blade build :name:编译name target
blade clean:清除构建的目标和缓存

(4)辅助工具

  • fix-include-path.sh 自动修正c/c++文件中#include不带路径,改为带路径的写法
  • genlibbuild 假设当前目录是一个C/C++库,那么自动生成库的BUILD文件,库名为目录名,如果有test文件,自动生成相应的cc_test测试
  • lsrc 按srcs = 需要的格式列出当前目录下所有的C/C++源文件(不包含测试源文件例如*_test.cc)

Reference:
[1] github地址:https://github.com/chen3feng/blade-build
[2] 辅助工具地址:https://github.com/chen3feng/blade-build/tree/master/tool

 类似资料: