新用到的一个c++项目编译构建工具---blade

在linux平台,以前makefile,cmake.... 各种难用和繁琐

blade 据说是腾讯搞出来的,好吧还不错,企鹅继续加油! 采用python开发的。

首先,Blade解决了依赖问题。 当你在构建某些目标时,头文件有变化,会自动重新构建。 最方便的是,Blade也能追踪库文件的依赖关系。比如 库 foo 依赖库 common,那么在库 foo 的 BUILD 文件中列入依赖:

cc_library(

    name = ‘foo‘,

    srcs = ...

    deps = ‘:common‘

)

那么对于使用foo的程序,如果没有直接用到common,那么久只需要列出foo,并不需要列出common。

cc_binary(

    name = ‘my_app‘,

    srcs = ...

    deps = ‘:foo‘

)

这样当你的库实现发生变化,增加或者减少库时,并不需要通知库的用户一起改动,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 编写,无需编译,直接安装使用。

    彻底避免以下问题:

    • 头文件更新,受影响的模块没有重新构建。
    • 被依赖的库需要更新,而构建时没有被更新,比如某子目录依赖遥远的某外部目录的代码,我在这个目录构建,外部目录的代码会被自动检查是否也需要重新构建。
时间: 2024-10-04 09:29:56

新用到的一个c++项目编译构建工具---blade的相关文章

前端项目自动化构建工具——Webpack入门教程

参考资料:https://www.webpackjs.com/(中文文档)   https://www.webpackjs.com/(官方文档) 首先有必要说明一下,本文侧重讲解webpack基本配置属性,不附带实例,将会以通俗易懂的形式地讲解:如若需要实例进行相关练习,可将本文作为理论基础: Webpack是前端项目自动化构建工具,本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构

项目自动构建工具对比(Maven、Gradle、Ant)

Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天. Maven的主要功能主要分为5点,分别是依赖管理系统.多模块构建.一致的项目结构.一致的构建模型和插件机制.我们可以从这五个方面来分析一下Gradle比起Maven的先进之处. 依赖管理系统 Maven为Java世界引入了一个新的依赖管理系统.在Java世界中,可以用groupId.artifactId.version组成的Coordin

【Node.js学习笔记】使用Gulp项目自动化构建工具

刚接触node.js,对前端的一些东西还不是很清楚,据说Gulp这东西很强大,先来看看从网上抄的一段关于自动化构建的描述: 在为数众多的中小型软件作坊中,不存在自动化构建和发布工具.构建.交付准备环境.代码发布全由手工完成,同样还有运行测试.备份旧版本.新版本打标签以及许多其他重复的事情.毕竟你可能认为这全是非常简单的工作,集成开发环境通过按钮或快捷键就可构建项目,你开启两个窗口拖放少许文件或文件夹即可完成网站发布.但当你在维护代码库和应用时所有这些事情加在一起,这里几分钟,那里几分钟,最终会浪

项目自动构建工具gradle使用

================================================================================================= 环境初始化: sudo apt-get install gradle 建立项目文件夹 mkdir gs-gradle 建立项目文件结构 cd gs-gradle mkdir initial mkdir complete mkdir test 建立程序文件结构 cd initial mkdir -p sr

idea 创建一个springboot 项目(hello world)

1. 打开IDEA,点击 +Create New Project 2. 在左侧菜单找到并点击 Spring Initializr,点击next. 注意,这里idea默认使用https://start.spring.io提供的在线模板,所以需要保证网络畅通. 3. 修改工程名,Maven Project(项目的构建工具),点击next. 4. 添加依赖 从左面选择大类,然后在窗口中间勾选需要的依赖.右边可以看到已选择的依赖项. 右上方还可以下拉选择Spring Boot的版本.完成后点击 Next

项目自动化建构工具gradle 入门0——环境 & 废话

gradle 是一个项目自动化构建工具.同类的产品还有ant ,maven等等.相比之下我更喜欢gradle,它语法简洁.兼容maven.ide集成很好. 学习使用gradle最快的方式是看文档,而且下载到的gradle文档中也包含了所有的文档.但是对于初学者而言或者是对只需要简单实用gradle的人来说,其实没必要去看那么多的文档. 在学习的过程中,我看过一些其他博友的文章,必须承认他们确实比我厉害比我有条例,在文章一开始有很多的铺垫和论述,大多从原理开始且用例子结束.而且很多都是在Mac 或

一个Cocos2d-JS项目的生成、编译及运行

下载了最新版的cocos2d-x之后,使用python运行setup.py进行安装,期间配置好相应的位置信息. 使用如下命令新建一个cocos2d-JS项目: $ cocos new HelloWorld -l js 其中,HelloWorld是你新建的项目名,-l js制定这是一个js项目:还可以使用参数-d指定项目位置,等. 使用如下命令编译web项目: $ cocos compile -p web 使用如下命令生成web项目: $ cocos run -p web 在已经配置好androi

第二章-第二题(每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。)--by侯伟婷

第二题:每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令.比较项目的新旧版本的差别. 下面我将自己的练习结果和个人感受记录如下: 第一步:安装Git,设置自己的账号和邮箱,参见Git教程-廖雪峰的官方网站,网址如下参考资料1所示. 第二步:在Git中新建repository,名叫HelloWorld,并进行初始化,如图所示. 第三步:在HelloWorld版本库中新建了helloWorld.txt文件,用以练习G

创建一个android项目与创建一个android虚拟设备

创建一个android项目 Navigator面板区点击右键-->New-->Android Application Project,打开New Android Applicaton窗口.输入Application Name(应用程序的名称,就是显示在手机上的名称,比如:微信),Project Name(项目名称,一般显示在eclipse上的项目名称),Package Name(指定它的java包名,比如:com.qq.weixin).Minimum Required SDK表示运行应用程序所