当前位置: 首页 > 编程日记 > 正文

C/C++包管理工具Conan简介

    Conan是一个开源的、跨平台的、去中心化的C和C++包管理器,它的源码在https://github.com/conan-io/conan ,License为MIT,最新发布版本为1.38.0,由Python实现。版本更新较频繁,但保持向前兼容。

    Conan特点

    (1).它是完全去中心化的:用户可以将他们的包托管在他们的私有服务器上,与JFrog Artifactory 和ConanCenter集成。具有客户端----服务器架构,客户端可以从不同的服务器(“远程”)获取包,也可以将包上传到不同的服务器,similar to the “git” push-pull model to/from git remotes.

    (2).它适用于所有平台:包括Linux、OSX、Windows、Android、iOS,也支持嵌入式,还支持交叉编译。

    (3).管理二进制文件:它可以为任何配置和平台甚至包括交叉编译创建、上传和下载二进制文件,从而节省大量开发和持续集成时间。二进制兼容性也可以配置和定制。在所有平台上以相同的方式管理所有工件。

    (4).与任何构建系统集成,包括任何专有和定制系统:为主要构建系统(CMake、Visual Studio MSBuild、Makefiles、Meson等)提供经过测试的支持。

    (5).可扩展。

    ConanCenter:是一个中央公共存储库,包含数百个流行的开源库包,以及许多针对主流编译器版本的预编译二进制文件。

    JFrog Artifactory Community Edition (CE):是推荐的、免费的、Conan服务器,可在你的控制下私下托管你自己的包。它是JFrog Artifactory for Conan包的免费社区版。

    Conan client:命令行工具,用于创建包和使用包,可创建本地仓库支持离线使用。

    Conan server:可私有化部署的服务器,是一个与Conan客户端一起分布的小型服务器。 它是一个简单的开源实现,提供基本功能。

  安装Conan:这里通过Conda安装Conan,关于Conda的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/86212252 ,python的版本需要3.8

conda create -n test_conan python=3.8
conda activate test_conan
pip install conan #conda install -c conda-forge conan

    在Conan中,一个包的定义:包名/版本@用户/渠道

    Conan客户端常用命令

    (1).查看conan版本:conan --version

    (2).搜索软件包,如opencv:conan search opencv* -r=all (或-r=conan-center)

    (3).显示所有源:conan remote list

    (4).通过conanfile.txt安装依赖包:conan install .

    下面是下载openssl 1.0.2s依赖包示例,conanfile.txt内容如下:

[requires]
openssl/1.0.2s[generators]
cmake

    在conanfile.txt目录下执行以下命令:

~/Disk/anaconda3/envs/test_conan/bin/conan install . -s arch=x86_64 -s compiler=gcc -s compiler.libcxx=libstdc++ -s compiler.version=4.9 -s os=Linux --build=openssl --build=zlib

执行结果如下图所示,会在~/.conan/data/openssl/1.0.2s目录下生成对应的头文件和库:

执行上述命令前,在当前目录下仅有conanfile.txt一个文件,执行完后会多出几个文件,如下图所示:

相关文章:

神经架构搜索在视频理解中研究进展的综述

作者 | Michael S. Ryoo 研究员与 AJ Piergiovanni 学生研究员(Google 机器人团队)来源 | TensorFlow(ID:TensorFlow_official)视频理解一直是项颇具挑战性的难题。视频中包含时空数据,因此要提取特征表示需…

Java命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令…

关于本分类(codeforces-好题系列)

前前后后花了将近半个月,终于将吴神的十场cf的50题目补完了,看到了各种技巧和DP的好题,为了方便以后查阅,新增一个分类便于查找,当然本分类的题目其他分类一般都有,先去吃个饭,回来刷题解转载于…

Conan客户端简单使用示例

在https://blog.csdn.net/fengbingchun/article/details/118443862 中对Conan进行了简单介绍,这里调用openssl的接口,写一个简单的test来说明Conan的使用步骤: (1).首先添加一个conanfile.txt文件,内容如下:依赖项为op…

Java解释器模式

解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 意图:给定一个语言&…

为什么鲜有炫富的程序员?看看中国各阶级收入统计表

网上那些口口声声随随便便就能年入百万的,听听就行。作为开发者,可以不参加双11,但是花钱最多的地方就是买电子产品和“买课”。他们的炫富就是:你根本不知道有多贵的机械键盘,为了赚钱和幸福,又买了多少大…

HQL中的Like查询需要注意的地方

public List getOrgan(String organCode, String organName) { String hsql; List list; if (organCode ! null && organCode.length() > 0) { hsql "from Ab31 where bae002 ? and aab061 like ?"; list getHibernateTemplate().find…

深度神经网络中的Batch Normalization介绍及实现

之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时,网络中会有BN层,即Batch Normalization,在每个Dense Block中都会有BN参与运算,下面对BN进行介绍并给出C和PyTorch实现。 Batch Normalization即…

韬光养晦的Sony AI,凭什么与Google和Facebook平起平坐?

作者 | 藏狐来源 | 脑极体(ID:unity007)伴随着感恩节气氛的日渐浓重,面对只剩下最后一个月份额的2019,奋进的、错失的,都已尘埃落定,是时候迎来盘点得失、清理思绪的冬藏时节了。整体来看&#…

Java迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 意图:提供一种方法顺序访问一个聚合对象中各个元…

Linux下搭建高效的SVN

第一种安装方式:svn下载:http://archive.apache.org/dist/subversion/需要的包yum install gcc gcc-cyum install expat-develyum install openssl-develhttp://labs.renren.com/apache-mirror//httpd/httpd-2.2.22.tar.gz //最好用2.2版本http://subver…

通过Windows10上的VS Code打开远端Ubuntu上的项目操作步骤

Ubuntu版本要求是16.04及以上版本。这里以16.04为例。 在Ubuntu上安装OpenSSH server,执行:$ sudo apt-get install openssh-server 在Windows 10 1803上安装Windows OpenSSH Client(注:Windows早期版本则需要安装Git for Windows)&#xff1…

Java中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 意图:用一个中…

那些打着AI万金油旗号的产品欺骗大众,如何识别?

作者 | Arvind Narayanan译者 | 刘畅出品 | AI科技大本营(ID:rgznai100)如今,很多打着AI名号售出的产品都属于万金油系列,没什么实质性的功能。为什么会这样?我们应该如何识别这类AI?幻灯片上是评估性格和工…

分享一款jQuery全屏滚动页面特性案例

分享一款jQuery全屏滚动页面特性案例。我们在来往官网,或者小米官网都会看到全屏滚动页面的一些例子。可以说全屏滚动页面越来越受欢迎。它们就像是竖着的图片轮转一样。这样的页面有很多,如:iPhone 5C页面:http://www.dowebok.co…

后深度学习时代的一大研究热点?论因果关系及其构建思路

作者 | Bernhard Schlkopf译者 | Kolen编辑 | Jane出品 | AI科技大本营(ID:rgznai100)尽管机器学习在现阶段取得了很大成功,但是相比于动物所能完成的工作,机器学习在动物擅长的关键技术上表现不尽人意,比如…

Java观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 意图:定义对象间的一种一对多的依赖关系,当一…

Python3中None用法

1.None是一个空值,空值是Python里的一个特殊值,用None表示。可以将None赋值给任何变量。 var None; print(var) # None if var is None:print("var has a value of None") # print else:print("var:", var) 2.None有自己的数据类型…

try finally 中的return

2019独角兽企业重金招聘Python工程师标准>>> public class Test { public static int test1() { int x 1; try { return x; } finally { x; } } public static int test2() { int x 1; try { return x; } finally { return x; } } public st…

我用Python破解了同事的加密压缩包

作者 | 朱小五来源 | 凹凸玩数据(ID: alltodata)又是一杯奶茶。事情的经过是这样的:又是奶茶,行吧行吧。快点开工,争取李大伟回来之前搞定。李大伟说是6位数字密码那么我们可以利用python生成全部的六位数字密码#生成从…

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

关于Valgrind的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/50196189. 这里介绍下在Ubuntu 16.04上通过android toolchain如android-ndk-r14b交叉编译Valgrind源码的操作步骤: 1. 从 https://valgrind.org/ 下载最新的版本3.17.0&…

Java状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 意图:允许对象在内部…

Red Hat 5.8 CentOS 6.5 共用 输入法

pick up from http://jingyan.baidu.com/article/20b68a885a3607796cec622c.html

Python3中with用法

Python中的with语句用于用上下文管理器(context manager)定义的方法包装块的执行,它允许将常见的try…except…finally使用模式封装起来以方便重用。 在Python中,在处理非托管资源(unmanaged resources)(如文件流)时使用with关键字。它允许确保你在使用资…

作为计算机专业的你,这些点你命中了哪些?

是不是学计算机的在别人眼里就得会修电脑?是不是编代码的程序员在别人眼里就得喜欢穿格子衫?是不是从事互联网行业的人在别人眼里就喜欢背双肩包出行?1我学计算机就得会修电脑?前两天我在加班的时候,电话突然响起&…

Java空对象模式

在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 在空对象模式中,我们…

JSON入门基础知识

2019独角兽企业重金招聘Python工程师标准>>> JSON入门基础 1、JSON定义 JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易…

Python3中raise用法

Python中raise语句支持强制触发指定的异常。 raise语法: raise [EXPRESSION [from EXPRESSION]] 如果raise后未跟表达式(expression),则raise重新引发当前作用域中活动的最后一个异常。如果当前范围内没有异常处于活动状态,则会引发RuntimeE…

精选实践 | 爱奇艺实用数据库选型树:不同场景如何快速选择数据库?

作者 | 郭磊涛 爱奇艺数据库和中间件负责人 TiDB User Group Ambassador来源 | 授权转载自AskTUG本文系 TUG 线下活动 “不同业务场景下的数据库技术选型思路” 分享实录。我是爱奇艺的数据库和中间件负责人郭磊涛,今天主要向大家分享数据库选型方面的思路&#xff…

iOS处理高并发量的数据请求和数据集合的对应关系

一、处理高并发请求的核心代码如下: // 创建信号量dispatch_semaphore_t semaphore dispatch_semaphore_create(0);// 创建全局并行dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_group_t group dispatch_gro…