Blade是腾讯开发的一个开源构建工具,旨在简化大型项目的构建,能够自动分析依赖,集成了编译、链接、测试、静态代码检查等功能,支持C/C++, Java, Python, Scala, protobuf等多种语言。

Blade构建是增量,只有需要更新时才会去构建相应的目标及其依赖。并且支持 ccache,可以大幅度加快重新构建速度。Blade 能检查到安装了 ccache 并自动启用,通常无需配置。

Blade的安装非常简单,只需要一行命令,此外还需要安装ninja作为其后端:

curl <https://blade-build.github.io/install.sh> | bash

Blade 就会被下载到 ~/.cache/blade-build 目录下。它还会创建一个 ~/bin/blade 符号连接,这样就可以直接使用 blade 命令。

参考文档:https://zzy979.github.io/posts/blade-build-tool/

BLADE_ROOT 工作空间

Blade要求项目有一个显式的根目录(称为工作空间),即BLADE_ROOT文件所在目录。根目录下是自己的模块子目录和第三方库目录,每个子目录下都有一个BUILD文件来声明该模块所包含的构建目标。

Blade获取当前工作空间的方法是,无论当前从哪一级子目录运行,都从当前目录开始向上查找BLADE_ROOT文件,有这个文件的目录即为工作空间。

以下一个项目目录结构示例:

my-project/
    **BLADE_ROOT**
    common/
        string/
            **BUILD**
            algorithm.h
            algorithm.cc
    foo/
        **BUILD**
        foo.h
        foo.cc
    thirdparty/
        gtest/
            **BUILD**
            gtest.h
            gtest.cc
            ...

Blade会自动将项目根目录添加到头文件搜索路径,因此#include包含头文件的相对路径是基于项目根目录的,对于跨目录包含的头文件来说这样可以清楚地知道头文件所在位置。

例如,在上面的目录结构中,要在foo.cc中包含algorithm.h,直接写#include "common/string/algorithm.h"即可。

其他目录的依赖通过//表示根目录,如//dir:name

BUILD语法

通用属性

deps属性