一、目录构造样式

.
└── workspace
├── BLADE_ROOT
├── build64_release
├── client
│   ├── BUILD
│   └── client.cpp
├── idl
│   └── student
│   ├── BUILD
│   └── student.thrift
├── proj
│   ├── BUILD
│   └── src
│   ├── main.cpp_bak
│   └── student_funcs_server.skeleton.cpp
├── README
└── SConstruct

二、blade 各个文件的意义

一般会先建立一个workspace,在里面touch BLADE_ROOT。包含BLADE_ROOT的文件夹是blade的根目录,比如如果要引用其他项目的头文件,路径是需要相对于BLADE_ROOT这一级目录来写的

三、BUILD 文件

cc_binary(
name='client',
srcs='client.cpp',
deps=[
'//idl/student:student_thrift',
]
) cc_library(
    name='abs_lib',
srcs='abs.cpp',
   allow_undefined=True,
)
 

name值得是这个binary的名字

srcs是要编译这个binary需要的源文件

deps是编译这个binary所需要的依赖。比如说workspace/proj/src/main.cpp里面调用了 workspace/abs/abs.cpp里面的abs()方法来取绝对值,那么就需要添加deps = ['//abs:abs_lib']这个依赖,注意,//abs:abs_lib里面的abs是相对于workspace的一个路径,后面的abs_lib是abs这个项目里面BUILD文件的name。

cc_library,这是说明,要讲目标编译成库文件,默认编译成"libabs_lib.a"这个静态库文件,可以通过添加编译选项,这样,blade build --generate-dynamic,这个参数来生成动态库,生成动态库的时候可能会报未定义的符号,可以加上 allow_undefined=True,这个选项

如果A library被B依赖,并且B的BUILD文件里面有dynamic_link=1这个选项,那么A库也会生成动态so库

四、编译

blade build

选项

--update-deps 自动从git上拉取依赖

五、用blade来自动编译thrift项目

需要用到 thrift_library

thrift_library(
name="student_thrift",
srcs="student.thrift",
export_incs=[""],
deps = [
"cpp3rdlib/thrift:0.9.1@//cpp3rdlib/thrift:thrift",
#"//idl/base:base_thrift",
],
)

thrift_library就会生成相应的thrift文件,相当于帮你手动执行了 thrift -gen cpp workspace/idl/student.thrift这个命令

如果我的 workspace/proj/src/main.cpp 是一个thrift server,那应该怎样写BUILD呢? 很简单,直接在deps里面写入  '//idl/student:student_thrift'   即可。这样,我的main.cpp里面就可以直接包含thrift的相关头文件了,然后最终将main.cpp编译成一个 thrift 的 server

blade 学习的更多相关文章

  1. lavarel模板引擎blade学习

    blade 模板学习 特点 主要的两个优点是:模板继承和区块 继承页面布局 布局文件(layout.php) + 详情文件 (page.php) 的组合,即一般到具体的组合.在blade文件之中的体现 ...

  2. Laravel学习第一天(创建laravel项目、路由、视图、blade模板)

    创建laravel项目 composer create-project laravel/laravel learnlv 4.1.* 查看帮助:composer create-project    使用 ...

  3. Laravel5.1学习笔记8 Blade模板

    简介 模板继承 定义一个页面布局模板 扩展一个页面布局模板 展示数据 控制语法的结构 Service Injection 扩展 Blade   简介 Blade 是 Laravel 提供的一个既简单又 ...

  4. 【blade利刃出鞘】一起进入移动端webapp开发吧

    前言 在移动浪潮袭来的时候,小钗有幸进入框架组做webapp框架开发,过程中遇到了移动端的各种坑,也产生了各种激情,就我们公司的发展历程来说 第一阶段:使用传统方式开发移动站点,少量引入HTML5元素 ...

  5. 【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局

    前言 我们在手机上布局一般是这个样子的: 其中头部对整个mobile的设计至关重要,而且坑也很多: ① 一般来说整个header是以fixed布局,fixed这个产物在移动端来说本身坑就非常多 ② 在 ...

  6. 【HTML5&CSS3进阶学习01】气泡组件的实现

    前言 气泡组件在实际工作中非常普遍,无论是网页中还是app中,比如: 我们这里所谓气泡组件是指列表型气泡组件,这里就其dom实现,css实现,js实现做一个讨论,最后对一些细节点做一些说明,希望对各位 ...

  7. Laravel5.0学习--01 入门

    本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境 ...

  8. laravel学习前期遇到的小知识点(1)

    1. 目前我用的laravel 5.2.36版本web中间件成为全局中间件(不知道从5.2.26以上就改变了还是怎样,没有深究),也就是之前的版本路由里默认会有一个Route::group的web中间 ...

  9. laravel初次学习总结及一些细节

    最近学习了laravel,先简单谈谈学习的感受吧 刚开始一周多一点的时间先把laravel的开发文档看了一遍,,感觉刚开始接触时的感觉laravel的目录与thinkphp又不一样,它们的渲染模板的方 ...

随机推荐

  1. .NET第一章

    1.介绍了.NET的作用和软件前景趋势 2.Visual studio .net 编程 3.介绍.net可以多种编程语言,通过公共语言类库存放 2.介绍C# 数据类型和变量设置,以及函数的使用 3.继 ...

  2. Linux下安装Python3的django并配置mysql作为django默认数据库(转载)

    我的操作系统为centos6.5 1  首先选择django要使用什么数据库.django1.10默认数据库为sqlite3,本人想使用mysql数据库,但为了测试方便顺便要安装一下sqlite开发包 ...

  3. advanceskeleton插件分身体和表情单独绑定的时候合并表情步骤

    advanceskeleton插件分身体和表情单独绑定的时候合并表情使用的代码以及合并步骤 1.身体单独绑定 2.表情单独绑定 3.合并步骤 ①原有adv表情文件删掉除了curve组以外所有东西 删除 ...

  4. [Ynoi2019模拟赛]Yuno loves sqrt technology III

    题目大意: 给你一个长为n的序列a,m次询问,每次查询一个区间的众数的出现次数,强制在线. 解题思路: 出题人题解 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 首先得离散化. 分块后,预处理Fi, ...

  5. C++函数装饰器

    今天在网上看到一个python实现的函数装饰器,尝试用C++11实现了一下,最后很粗糙的完成了,代码如下. 函数装饰器:接受一个函数.将此函数进行一些装饰,成为另一个函数.新生产的函数具有原函数的功能 ...

  6. 请用java解析下xml

    Java   XML简介 XML(EXtensible Markup Language)  可扩展标记语言 可以说是一个文本文件 作用数交互  配置应用程序 Xml解析技术 三种方式 Dom 文档数据 ...

  7. 285款photoshop烟花笔刷

    这是一套非常漂亮的PS烟花笔刷,包含285款不同形状效果的笔刷样式,此套photoshop烟花笔刷非常容易使用,使用可以将它们用作照片叠加,用于数码照片处理,作为游戏或艺术品的视觉效果,以及作为装饰元 ...

  8. Java中的锁分类与使用

    1. Java锁的种类 在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁.读写锁等等,非常繁多,在此做一个总结.介绍的内容如下: 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/ ...

  9. C 标识符, 数据存储形式(原码,反码,补码)

    一.  标识符 第一个字母必须是英文字母或下划线 二. 数据存储形式(补码存储) 最高位是符号位 ---- 0表示整数 ; 1 表示负数 1. 正数:原码 = 反码 = 补码 例子 : (10) 原码 ...

  10. 部署activiti 5.15.1的Activiti Explorer

    1.从官网下载activiti包,将其中的activiti-explorer.war文件拷贝到tomcat的webapps目录下: 2.将mysql驱动包文件mysql-connector-java- ...