使用BLADE构建c++工程管理

字数764 阅读2753 评论2 喜欢4

一. c++工程依赖管理

之前在百度一直使用comake2构建c++项目,十分方便。免去了手写Makefile的痛苦,很多项目都不需要从零开始,其中的一个配置类似如下:

WORKROOT('../../../')
CopyUsingHardLink(True)
CPPFLAGS('-D_GNU_SOURCE -D__STDC_LIMIT_MACROS -DVERSION=\\"1.9.8.7\\"')
CFLAGS('-g -pipe -W -Wall -fPIC')
CXXFLAGS('-g -pipe -W -Wall -fPIC')
INCPATHS('. ./include ./output ./output/include')
CONFIGS('lib2-64/dict@dict_3-1-15-0_PD_BL')
CONFIGS('lib2-64/ullib@ullib_3-1-41-0_PD_BL')
CONFIGS('public/configure@configure_1-2-1-0_PD_BL')
CONFIGS('public/ependingpool@ependingpool_1-0-6-0_PD_BL')
Application('test',Sources(user_sources))
StaticLibrary('test',Sources(user_sources),HeaderFiles(user_headers))
SharedLibrary('test',Sources(user_sources),HeaderFiles(user_headers))

基本思路是:新的项目相当于代码树的叶子节点,它可以依赖现有代码树上有权限的任意的一个字节点代码。comake2生成Makefile文件进行编译。

WORKROOT: 指定了这颗代码树的根节点的相对位置
CONFIGS:指定了你要依赖的库的位置,以及具体的版本,如果不指定则依赖trunk的代码,这个和maven的snapshot版本等概念类似。
Application: 输出二进制可运行
StaticLibrary:输出静态库
SharedLibrary:输出动态库

很可惜comake2一直没有开源。
类似的工具在其他的语言已经有了很好的解决方案
nodejs - npm
php - composer
python - pip
java - maven

二. BLADE - from 腾讯

blade@github
一个结合第三方lib和thrift的示例

  • 原理
    不同于COMAKE2使用make, BLADE使用scons进行编译
    makefile和scons的区别在这里有着详细的说明:make vs scons

  • 我们在实际项目中使用了blade,总结下优点如下:

    1. 配置简单,只需要配置向下一层的依赖关系,因此可以逐层构建c++代码仓库
    2. 支持thrift和proto自动编译连接的功能
  • 下图说明一个binary代码组织结构,注意:BLADE_ROOT文件,作为工程root目录的标记

    总体代码目录组织.png
  • 二进制依赖配置

    binary.png

    其中
    name : blade作为依赖的最小单元,也是编译的二进制的目标名称
    src : cpp文件列表
    deps:依赖全局的pthread.a,依赖root目录/thrift_protocol目录
    optimize: 编译的flag设置,是否使用c++0x

  • 使用小技巧
    1. 如果编译失败,开启--verbose模式,会有详细编译连接命令。很多时候是由于BLADE_ROOT没有合理配置
    2. 如果链接失败,可以开启ld_debug=all, 定位
      Valid options for the LD_DEBUG environment variable are:

libs display library search paths
reloc display relocation processing
files display progress for input file
symbols display symbol table processing
bindings display information about symbol binding
versions display version dependencies
scopes display scope information
all all previous options combined
statistics display relocation statistics
unused determined unused DSOs
help display this help message and exit

最新文章

  1. server2003中看不到网上邻居内容,其他电脑无法通过计算机名和IP访问本计算机(但网上邻居中可访问到)
  2. [转]Google Guava官方教程(中文版)
  3. CSS3动画:YouTube的红色激光进度条
  4. CSS魔法堂:不得不说的Containing Block
  5. python数据库(mysql)操作
  6. [LeetCode] Add Two Numbers
  7. HD2444The Accomodation of Students(并查集判断二分图+匹配)
  8. page74-泛型可迭代的基础集合数据类型的API-Bag+Queue+Stack
  9. protel DXP的类矢量图功能
  10. Bootstrap简易使用指南
  11. Flink 另外一个分布式流式和批量数据处理的开源平台
  12. Front-End Engineer 技术栈
  13. java的几个版本以及jre,jdk等概念——【转载】JDK、Java SE、Java EE、Java ME我该选
  14. awakeFromNib小总结
  15. JAVA HashMap 解析
  16. ES6中的Promise用法
  17. 《mysql必知必会》读书笔记--存储过程的使用
  18. 测试驱动开发实践4————testSave之新增文档分类
  19. C语言实现4种常用排序
  20. Groovy学习笔记-布尔求值

热门文章

  1. Jquery.min.js 下载
  2. 安装 Couchbase 服务器
  3. 「c++小学期」实验题目及代码
  4. 自定义不等高cell—storyBoard或xib自定义不等高cell
  5. bzoj1799: [Ahoi2009]self 同类分布
  6. python 模块的介绍(一)
  7. matlab之meshgrid()函数
  8. 【BZOJ-4353】Play with tree 树链剖分
  9. springMVC-错误消息的显示和国际化
  10. BZOJ2120 数颜色(带修改莫队)