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

使用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/[email protected]_3-1-15-0_PD_BL‘)
CONFIGS(‘lib2-64/[email protected]_3-1-41-0_PD_BL‘)
CONFIGS(‘public/[email protected]_1-2-1-0_PD_BL‘)
CONFIGS(‘public/[email protected]_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 腾讯

[email protected]
一个结合第三方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

时间: 2024-11-03 21:28:54

使用BLADE构建c++工程管理的相关文章

基于WebForm+EasyUI的工程管理系统形成之旅 -- 构建Web界面

上篇<基于WebForm+EasyUI的工程管理系统形成之旅 -- 数据统计>,主要介绍系统数据统计所采用图形.报表工具. 本篇将如何构建Web界面以及新增.编辑.导出数据等功能. 1.在Web界面使用ParamQueryGrid控件 web界面,如图所示

emacs工程管理,cedet ede插件自动构建Make,Automake

鉴于自己一直都是在做客户端开发方面的工作,服务端很多知识都随着时间淡忘了,最近有一个计划,用一些时间补一下基础.所以早上很早就起床,花了一点时间大致浏览了一下BSD socket的相关API,然后用GNU C写了一个简单的多线程,阻塞EchoServer.工程的代码倒是不多,就是基于原生API开发,总是有很多的errcode需要处理,比较的烦.所以我干脆就直接写了个宏去处理,简单的输出strerrno(errno)和errno就好.虽然这个宏实现起来比较的简单,但是还是感觉比较的值,节省了不少的

嵌入式linux QT开发(四)——QT Creator工程管理

嵌入式linux QT开发(四)--QT Creator工程管理 一.QT Creator工程管理 QT Creator以工程项目的方式对源码进行管理,一个QT工程中包含不同类型的文件如下: A..pro项目描述文件 B..pro.user用户描述文件 C..h头文件 D..cpp源文件 E..ui界面描述文件 F.资源文件(图片.音频等) 二..pro项目描述文件 1..pro项目描述文件基本构成如下: A.#注释起始符 B.QT模块声明 C.TARGET可执行文件名 D.TEMPLATE程序

eclipse+maven+tomcat构建web工程

我们要利用Maven构建一个web应用,开发环境为eclipse+tomcat.构建过程如下: 1.工具准备 eclipse:版本为eclipse 4.2(Juno Service),maven插件的安装与配置参见"m2eclipse安装与配置" tomcat:版本为apache-tomcat-6.0.37(即tomcat6.x系列,本文安装在D:\work\tomcat6\apache-tomcat-6.0.37-maven) 2.建立web应用 我们使用eclipse建立maven

使用Gradle构建Android工程

Gradle是以Groovy语言为基础,基于DSL语法的构建工具,它通过插件的方式定制工程构建过程.Google开发了Android Gradle插件,使用Gradle构建Android工程. Gradle构建Android工程,我们可以在Android studio中使用,也可以在命令行中使用,也可以集成到持久化集成工具中. Gradle构建Android工程的配置文件名是build.gradle,存放在工程的根目录下. 一个Android工程(Project)是由一个或多个组件(Module

RTT工程管理

一.RTT工程管理 RTT采用SCons管理工程. 本次安装版本:Python-2.7.3.1.exe,python-2.7.11.msi,scons-2.3.1-setup.exe 安装完成后,需要在环境变量中添加PATH(C:\Python27\Scripts). 可用cmd下scons验证是否安装正确. scons通过sconscript和sconstruct文件来组织源码结构,通常一个项目只有一个说construct,但是有多个sconscript. 1.RTT的配置是通过rtconfi

中国科学院大学工程管理与信息技术学院 2014年招收以下八个领域在职工程硕

中国科学院大学工程管理与信息技术学院2014年招收以下八个领域在职工程硕士,欢迎广大考生报考. 一.专业领域介绍 招生领域 研究方向 学费 报考条件 学位/证书 学习方式 项目管理 工程管理 IT项目管理 金融管理 大数据项目管理 4.3万 2011年7月31日前获得学士学位或2010年7月31日前获得国民教育序列大学本科毕业证书的在职工程技术或工程管理人员,或从事工程技术与工程管理教学的教师. 1.国务院学位办批准授予的工程硕士学位证书 2.高级职业资格证书/相应领域国际认证证书. 针对北京及

3.Makefile工程管理

3.Makefile工程管理 一.体验 在前面的笔记里可以看到,要编译一个简单的工程需要的编译步骤是很多的.前面还是只有一个汇编文件,在一个工程里,会有很多文件的,如果像前面的那种编译方式是很不可靠的.这就需要Makefile工程管理. 例如前面的那个led.S,要编译成led.bin的步骤:图1-1: arm-linux-gcc -g -c led.S arm-linux-ld -Tled.lds -o led.elf led.o arm-linux-objcopy -O binary led

通过rebar构建erlang工程

1.创建一个项目文件夹: mkdir myapp cd myapp 2.下载rebar的二进制文件到这个项目的文件夹. git clone https://github.com/basho/rebar.git; 3.使用rebar模板系统构建我们工程的“骨架”. rebar creat-app appid=myapp 这条命令执行后会在项目文件中产生一个子文件夹“src”,其包含三个文件: myapp.app.src:otp应用程序的资源文件 myapp_app.erl:一个OTP应用程序的Ap