conan使用(三)--打包只有头文件的库
参考:https://docs.conan.io/en/latest/howtos/header_only.html?highlight=header%20only
对于只含头文件的库打包非常简单,以rapidjson为例。
执行创建命令:
conan new rapidjson/1.1.0
然后修改生成的conanfile.py:
# -*- coding: UTF-8 -*-
import os
from conans import ConanFile, tools
class RapidjsonConan(ConanFile):
name = "rapidjson"
version = "1.1.0"
license = "MIT"
author = "Tencent"
url = "https://github.com/Tencent/rapidjson.git"
description = "A fast JSON parser/generator for C++ with both SAX/DOM style API "
topics = ("JSON")
no_copy_source = True
# 如果是先准备好源码,可以直接使用exports_sources而不要用source方法
# exports_sources = "include/*"
_source_path = "rapidjson"
def source(self):
'''retrieval of the source code here. Remember you can also put the code
in the folder and use exports instead of retrieving it with this
source() method
'''
# self.run("git clone ...") or
# tools.download("url", "file.zip")
# tools.unzip("file.zip" )
self.run("git clone -b version1.1.0 https://github.com/Tencent/rapidjson.git")
def package(self):
# 只需要include中的文件
include_folder = os.path.join(self._source_path, "include")
self.copy(pattern="license.txt", dst="license", src=self._source_path)
self.copy(pattern="*", dst="include", src=include_folder)
def package_id(self):
self.info.header_only()
如果是手动准备源码,请首先从GitHub上下载rapidjson源码:
git clone -b version1.1.0 https://github.com/Tencent/rapidjson.git
确保conanfile.py和rapidjson目录在同一级。
然后执行:
conan create . tencent/stable
不报错误的话,就会生成成功,在系统conan缓存目录下就可以发现已经生成好了包:

最后将生成的包上传到服务器:
conan upload rapidjson/1.1.0@tencent/stable -r develope --all
查询服务器仓库上的包,表明已经上传成功:

接下来我们在Ubuntu下写个测试程序测试一下看是否能成功使用。
首先在工程目录下写一个conanfile.txt:
[requires]
rapidjson/1.1.0@tencent/stable
[imports]
include, * -> ./include
因为只是引入一个纯头文件库,所以配置写的很简单。imports是将库中include目录下的所有文件拷贝到编译目录的include目录下。
然后创建源代码main.cpp,吧rapidjson官网的例子拷贝过来:
// rapidjson/example/simpledom/simpledom.cpp`
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
using namespace rapidjson;
int main() {
// 1. 把 JSON 解析至 DOM。
const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
Document d;
d.Parse(json);
// 2. 利用 DOM 作出修改。
Value& s = d["stars"];
s.SetInt(s.GetInt() + 1);
// 3. 把 DOM 转换(stringify)成 JSON。
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
d.Accept(writer);
// Output {"project":"rapidjson","stars":11}
std::cout << buffer.GetString() << std::endl;
return 0;
}
然后编写CMakeLists.txt:
project(rapidjsonTest)
cmake_minimum_required(VERSION 2.8.12)
include_directories(${PROJECT_BINARY_DIR}/include)
add_executable(${PROJECT_NAME} main.cpp)
这样,我们创建一个build目录,来进行编译:

进入build目录执行:
conan isntall ..
cmake ..
make
./rapidjsonTest

表明引入成功。
这里补充一个conan使用技巧,就是默认搜索库的顺序是先搜索它先先加入的conan-cnter,没有的话才会搜索我们后来加入的develope库,但是实际应用中我们肯定期望优先搜索我们自己的库,因此应该改变搜索顺序。方法就是找到conan缓存目录(一般就是用户根目录下的.conan文件),下面有一个remotes.json,修改里面库的顺序即可。
下一步计划是将chromium-base库打包实现conan管理,加油!
conan使用(三)--打包只有头文件的库的更多相关文章
- Windows Pe 第三章 PE头文件(上)
第三章 PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...
- Makefile一 头文件及库搜索路径
头文件及库搜索路径 头文件的搜索路径: 头文件的搜索规则是:找到就使用,停止继续往下寻找 1: #include “mytest.h” 搜索的顺序为: (1)先搜索当前目录 (2)然后搜索编译时 -I ...
- VC中添加头文件以及库
原文:http://blog.csdn.net/lwb102063/article/details/52068389 附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tool ...
- C/C++ 头文件以及库的搜索路径
关键点: 1. #include <...> 不会搜索当前目录 2. 使用 -I 参数指定的头文件路径仅次于 搜索当前路径. 3. gcc -E -v 可以输出头文件路径搜索过程 C++编 ...
- gcc的搜索路径,头文件和库
1 抛开默认的搜索路径,自己指定搜索路径 第一,明确自己编写的代码所需要的头文件和库放在了哪里 第二,使用“-I”指定头文件的搜索路径,使用-rpath指定库的搜索路径 2 无论是本地编译还是交叉编译 ...
- Android JNI入门第三篇——jni头文件分析
一. 首先写了java文件: public class HeaderFile { private native void doVoid(); native int doShort(); native ...
- Windows Pe 第三章 PE头文件(下)
3.5 数据结构字段详解 3.5.1 PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550 ...
- 链接(extern、static关键词\头文件\静态库\共享库)
原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = ...
- gcc编译时头文件和库文件搜索路径
特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始( ...
随机推荐
- 面向对象程序设计(JAVA) 第10周学习指导及要求
2019面向对象程序设计(Java)第10周学习指导及要求 (2019.11.1-2019.11.4) 学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...
- Feign的介绍与使用(五)
一.Feign的介绍 Feign是一个声明式 WebService 客户端,使用Feign能够让编写Web Service 客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持J ...
- CF1225C p-binary
CF1225C p-binary 洛谷评测传送门 题目描述 Vasya will fancy any number as long as it is an integer power of two. ...
- luoguP4248 [AHOI2013]差异
题意 考虑式子前面那段其实是\((n-1)*\frac{n*(n+1)}{2}\),因为每个后缀出现了\(n-1\)次,后缀总长为\(\frac{n*(n+1)}{2}\). 现在考虑后面怎么求: \ ...
- angular 多路由模块新建组件的方法
More than one module matches. Use skip-import option to skip importing the component into the closes ...
- The Python Debugger Pdb
Python Debugger pdb The Python Debugger Pdb 可以直接在命令行中启动,调试程序 也可以写在代码中 命令行使用 可以直接在命令行指定要进行调试的程序 pytho ...
- 有缓存区的管道channel
package main import ( "fmt" "time" ) func main() { //创建一个有缓存区的管道 ch := make(chan ...
- JAVA的addAll方法
List和collections工具类都有这个方法!
- CF1041C Coffee Break
CF1041C Coffee Break 题目大意: 给定nn个数和一个kk,这nn个数都不超过mm 每次从没被去掉的数里面选一个数aa,去掉aa,然后可以任意一个b(b>a+k)b(b> ...
- Excel日历控件实现下拉选取日期含VB代码实现
以下是Excel2016通过安装控件,实现表格下拉选择日期的一些步骤: 知识准备工作:先了解下如何安装控件,这一部分很重要,excel选择可用宏https://jingyan.baidu.com/ar ...