blade 学习
一、目录构造样式
.
└── 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 学习的更多相关文章
- lavarel模板引擎blade学习
blade 模板学习 特点 主要的两个优点是:模板继承和区块 继承页面布局 布局文件(layout.php) + 详情文件 (page.php) 的组合,即一般到具体的组合.在blade文件之中的体现 ...
- Laravel学习第一天(创建laravel项目、路由、视图、blade模板)
创建laravel项目 composer create-project laravel/laravel learnlv 4.1.* 查看帮助:composer create-project 使用 ...
- Laravel5.1学习笔记8 Blade模板
简介 模板继承 定义一个页面布局模板 扩展一个页面布局模板 展示数据 控制语法的结构 Service Injection 扩展 Blade 简介 Blade 是 Laravel 提供的一个既简单又 ...
- 【blade利刃出鞘】一起进入移动端webapp开发吧
前言 在移动浪潮袭来的时候,小钗有幸进入框架组做webapp框架开发,过程中遇到了移动端的各种坑,也产生了各种激情,就我们公司的发展历程来说 第一阶段:使用传统方式开发移动站点,少量引入HTML5元素 ...
- 【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局
前言 我们在手机上布局一般是这个样子的: 其中头部对整个mobile的设计至关重要,而且坑也很多: ① 一般来说整个header是以fixed布局,fixed这个产物在移动端来说本身坑就非常多 ② 在 ...
- 【HTML5&CSS3进阶学习01】气泡组件的实现
前言 气泡组件在实际工作中非常普遍,无论是网页中还是app中,比如: 我们这里所谓气泡组件是指列表型气泡组件,这里就其dom实现,css实现,js实现做一个讨论,最后对一些细节点做一些说明,希望对各位 ...
- Laravel5.0学习--01 入门
本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境 ...
- laravel学习前期遇到的小知识点(1)
1. 目前我用的laravel 5.2.36版本web中间件成为全局中间件(不知道从5.2.26以上就改变了还是怎样,没有深究),也就是之前的版本路由里默认会有一个Route::group的web中间 ...
- laravel初次学习总结及一些细节
最近学习了laravel,先简单谈谈学习的感受吧 刚开始一周多一点的时间先把laravel的开发文档看了一遍,,感觉刚开始接触时的感觉laravel的目录与thinkphp又不一样,它们的渲染模板的方 ...
随机推荐
- 时间Date.js
<span style="line-height: 25.2px;">/** * 日期解析,字符串转日期 * @param dateString 可以为2017-02- ...
- JavaScript基础之对象属性的检测和枚举
属性检测 对象作为属性的集合,属性又包括自有属性和继承属性: 检测方法: \__ in运算符: \__ var obj = { x:1 } console.log( 'toString' in o ...
- jsp(待改)
##JSP 1.指令 作用:用于配置JSP页面,导入资源文件 *书写格式 <%@ 指令名称 属性1=值1,属性2=值2 ...%> *分类: *page :配置JSP页面的 #属性: c ...
- linux 下 mac 地址如何查询
cat /sys/class/net/eth0/address
- 11. IDS (Intrusion detection systems 入侵检测系统 6个)
Snort该网络入侵检测和防御系统擅长于IP网络上的流量分析和数据包记录. 通过协议分析,内容研究和各种预处理器,Snort可以检测到数千个蠕虫,漏洞利用尝试,端口扫描和其他可疑行为. Snort使用 ...
- Centos6两个镜像文件的合并方法
1.相关目录: /mnt/dvd1和/mnt/dvd2 用于挂载 Centos 镜像 /mnt/dvd3 合并后的镜像文件 /mnt/iso ISO储存 mkdir -p /mnt/dvd1 /mnt ...
- 转 一个oracle11g 使用exp导出空表丢失的问题分析及解决办法
用exp无法导出空表解决方法 最早的一次使用oracle 11g导出数据发现有的表丢失了,感觉莫名其妙的,后来终于找到原因了. 找到问题以后,再看看解决方案.11GR2中有个新特性,当表无数据时,不分 ...
- Django的安装和启动以及第一个工程的建立
---恢复内容开始--- 前提:已经安装了python和Anaconda (windows系统) 在Anaconda安装好之后,其文件夹下有一个叫做Anaconda Prompt的工具,类似windo ...
- 关于Asset Library核心功能的一些计划
Asset Library是公司计划中的一个网站,用于存放图像,视频,三维文件等资产,在之前的一个多月中我写完了该网站的后台及部分前端,现在就剩最后一部分了,这也是最棘手最核心的部分,就是在网页上快速 ...
- python3-基础7
协程函数 面向过程编程 递归与二分法 内置函数 lambda 模块与包的使用 import from ... import ... 常用模块 ########################### ...