参考: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使用(三)--打包只有头文件的库的更多相关文章

  1. Windows Pe 第三章 PE头文件(上)

    第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...

  2. Makefile一 头文件及库搜索路径

    头文件及库搜索路径 头文件的搜索路径: 头文件的搜索规则是:找到就使用,停止继续往下寻找 1: #include “mytest.h” 搜索的顺序为: (1)先搜索当前目录 (2)然后搜索编译时 -I ...

  3. VC中添加头文件以及库

    原文:http://blog.csdn.net/lwb102063/article/details/52068389   附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tool ...

  4. C/C++ 头文件以及库的搜索路径

    关键点: 1. #include <...> 不会搜索当前目录 2. 使用 -I 参数指定的头文件路径仅次于 搜索当前路径. 3. gcc -E -v 可以输出头文件路径搜索过程 C++编 ...

  5. gcc的搜索路径,头文件和库

    1 抛开默认的搜索路径,自己指定搜索路径 第一,明确自己编写的代码所需要的头文件和库放在了哪里 第二,使用“-I”指定头文件的搜索路径,使用-rpath指定库的搜索路径 2 无论是本地编译还是交叉编译 ...

  6. Android JNI入门第三篇——jni头文件分析

    一. 首先写了java文件: public class HeaderFile { private native void  doVoid(); native int doShort(); native ...

  7. Windows Pe 第三章 PE头文件(下)

    3.5  数据结构字段详解 3.5.1  PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550 ...

  8. 链接(extern、static关键词\头文件\静态库\共享库)

    原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = ...

  9. gcc编译时头文件和库文件搜索路径

    特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始( ...

随机推荐

  1. Redis缓存策略

    常用策略有“求留余数法”和“一致性HASH算法” redis存储的是key,value键值对 一.求留余数法 使用HASH表数据长度对HASHCODE求余数,余数作为索引,使用该余数,直接设置或访问缓 ...

  2. 《anchor-based v.s. anchor-free》

    作者:青青子衿链接:https://www.zhihu.com/question/356551927/answer/926659692来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  3. glade No package 'libxml-2.0' found

    ------------恢复内容开始------------ 今天突发奇想 root@Aja:~/下载/libxml2-master# glade 不会用纳 百度一下——————————>> ...

  4. MySQL实战45讲学习笔记:第四十三讲

    一.本节概述 我经常被问到这样一个问题:分区表有什么问题,为什么公司规范不让使用分区表呢?今天,我们就来聊聊分区表的使用行为,然后再一起回答这个问题. 二.分区表是什么? 为了说明分区表的组织形式,我 ...

  5. 色彩缤纷的Python(改变字体颜色及样式)

    色彩缤纷的python(改变字体颜色及样式) 在项目过程中,我们常常会因为输出信息的颜色与样式过于单调以至于让人在视觉上感到很杂乱,所以看下文: 在Linux终端中,使用转义序列来进行如上所述的显示, ...

  6. github README.md创建不了

    在项目主页上,点击‘Add a README’按钮,如下图: 进入编辑界面,编辑好内容后,提交按钮的状态为灰化不可点击,如下图: 不知道为什么会出现这种情况,但是我无意中点击了Ctrl+Enter竟然 ...

  7. 剑指offer:剪绳子(找规律,贪心算法,动态规划)

    1. 题目描述 /* 题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1] ...

  8. Java 未来行情到底如何,来看看各界人士是怎么说的

    这是黄小斜的第102篇文章 作者 l 黄小斜 来源 l 公众号[程序员黄小斜](ID:AntCoder) 转载请联系作者(wx_ID:john_josh) Java从出生到现在已经走过了 20 多个年 ...

  9. Flutter命令突然无响应、vscode突然无法连接到IOS模拟器

    这周过来突然flutter相关命令运行都没有响应, 打开任务管理器,关闭所有dart进程即可解决

  10. Nginx+Tomcat+Memcache 实现session共享

    Nginx + Tomcat + Memcache 实现session共享 1. Nginx 部署 1.上传源码包到服务器,解压安装 下载地址:http://nginx.org/en/download ...