conan-c++包管理工具安装及使用指南

2023-05-16

本篇文章的代码都在这里备份

文章目录

    • 一、conan介绍
      • 1.1 简单介绍
      • 1.2 conna特点
      • 1.3 跨平台
    • 二、conan全平台安装
    • 三、使用conan教程
    • 四、快速总结conan

一、conan介绍

  1. 跨平台
  2. c、c++包管理工具
  3. python写的
  4. 开源
  5. 类似java的maven,python的pip

1.1 简单介绍

  • Conan是C和C ++语言的依赖项和程序包管理器。它是免费和开源的,并且可以在所有平台上使用:Windows,Linux,OSX,FreeBSD,Solaris等,并且可以用于开发所有目标,包括嵌入式,移动(iOS,Android)和裸机。它还与所有构建系统集成,例如CMake,Visual Studio(MSBuild),Makefile,SCons等,包括专有系统。

  • 它是专门为加速C和C ++项目的开发和持续集成而设计和优化的。借助完全的二进制管理,它可以在所有平台上使用完全相同的过程为包的任意数量的不同版本创建和重用任意数量的不同二进制文件(用于不同的配置,如体系结构,编译器版本等)。由于它是分散式的,因此很容易运行您自己的服务器以私下托管您自己的软件包和二进制文件,而无需共享它们。建议使用免费的JFrog Artifactory社区版(CE),由Conan服务器在您的控制下私下托管您自己的程序包。


1.2 conna特点

  • Conan成熟稳定,对向前兼容性(不间断政策)有坚定的承诺,并有一个完整的团队全职致力于其改进和支持。它由一个伟大的社区支持和使用,从ConanCenter中的开源贡献者和包创建者到数千个使用它的团队和公司。

  • Conan是具有客户端-服务器体系结构的分散式软件包管理器。这意味着客户端可以从不同的服务器获取软件包,也可以将软件包上载到不同的服务器(“远程”),类似于“ git”推拉模型到/从git远程服务器。

  • 从较高的角度来看,服务器只是程序包存储。他们不构建也不创建包。这些包是由客户端创建的,并且如果二进制文件是从源代码构建的,则该编译也将由客户端应用程序完成。
    在这里插入图片描述
    上图中的不同应用程序是:

  • Conan客户端:这是一个控制台/终端命令行应用程序,其中包含用于程序包创建和使用的繁琐逻辑。Conan客户端具有用于程序包存储的本地缓存,因此它使您可以完全创建和脱机测试程序包。您也可以脱机工作,只要不需要远程服务器上的新软件包即可。

  • 推荐使用JFrog Artifactory Community Edition(CE),由Conan服务器在您的控制下私下托管您自己的程序包。它是JFrog Artifactory for - Conan软件包的免费社区版本,包括WebUI,多个身份验证协议(LDAP),用于创建高级拓扑的虚拟和远程存储库,Rest API和用于存储任何工件的通用存储库。

  • conan_server是与Conan客户端一起分发的小型服务器。这是一个简单的开源实现,它提供基本功能,但不提供WebUI或其他高级功能。
    ConanCenter是一个中央公共存储库,社区在其中为流行的开源库(例如Boost,Zlib,OpenSSL,Poco等)提供软件包。


1.3 跨平台

Conan可在Windows,Linux(Ubuntu,Debian,RedHat,ArchLinux,Raspbian),OSX,FreeBSD和SunOS上运行,并且由于具有可移植性,因此它可在可运行Python的任何其他平台上运行。它可以针对任何现有平台,从裸机到桌面,移动,嵌入式,服务器,跨架构。

Conan也可以与任何构建系统一起使用。与最流行的集成有内置的集成,例如CMake,Visual Studio(MSBuild),自动工具和Makefile,SCons等。但不需要使用任何集成。甚至没有必要所有软件包都使用相同的构建系统,每个软件包都可以使用自己的构建系统,并依赖于使用不同构建系统的其他软件包。还可以与任何构建系统(包括专有系统)集成。

同样,柯南可以管理任何编译器和任何版本。有一些最流行的默认定义:gcc,cl.exe,clang,apple-clang,intel,具有不同的版本配置,运行时,C ++标准库等。该模型还可以扩展到任何自定义配置。

二、conan全平台安装

无论是在什么平台,因为conan是python开发的。都可以使用python的包管理工具pip下载

pip install conan

安装后:

  • 命令
conan --version
  • 结果
    在这里插入图片描述

就可以看到安装的版本。

更新conan:

 pip install conan --upgrade  

三、使用conan教程

本篇文章的代码都在这里备份

让我们从一个示例开始:我们将创建一个MD5哈希计算器应用程序,该应用程序使用最流行的C ++库之一:Poco。

在这种情况下,我们将使用CMake作为构建系统,但请记住,柯南可与任何构建系统一起使用,而不仅限于使用CMake。

  • 代码段
 #include "Poco/MD5Engine.h"
 #include "Poco/DigestStream.h"

 #include <iostream>

 int main(int argc, char** argv){
     Poco::MD5Engine md5;
     Poco::DigestOutputStream ds(md5);
     ds << "abcdefghijklmnopqrstuvwxyz";
     ds.close();
     std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl;
     return 0;
 }
  • 依赖项
    我们知道我们的应用程序依赖于Poco库。让我们在ConanCenter遥控器中查找它,转到https://conan.io/center,然后在搜索框中键入“ poco”。我们将看到有一些不同的版本可用。
    或者我们直接使用命令行:
 conan search poco --remote=conan-center

我们可以看到搜索结果截图:

在这里插入图片描述

我们可以看到有很多版本的poco库版本

我对版本1.9.4比较感兴趣,所以我准备查看一下关于这个版本的信息。我输入以下指令,得到反馈。

  • 命令
    conan inspect poco/1.9.4
    
  • 结果截图
    在这里插入图片描述
    看了描述后我决定就用它了,然后我在我的项目里面建立一个名为:conanfile.txt的文件。
    在里面写上了
  • conanfile.txt
     [requires]
     poco/1.9.4
    
     [generators]
     cmake
    
    

接下来:我们将安装所需的依赖项并生成构建系统的信息

首先我们创建一个文件夹,里面放上我们刚刚写的依赖于库文件的.cpp文件,命名为;md5.cpp,然后在创建一个名为build的文件夹,一会用来构建工程。现在我们的目录结构是这样的:
在这里插入图片描述

在正式开始下载库文件并编译的前,我们先告诉conan使用c++11的标准来编译我们需要的库文件。
执行下面指令:

conan profile update settings.compiler.libcxx=libstdc++11 default

现在开始使用conan编译我们的库文件,首先进入build文件夹然后执行指令:

conan install .. 

如果你是初次安装就会看到下面这张截图:
在这里插入图片描述

最后安装结束。

Conan安装了我们的Poco依赖关系,还安装了传递依赖关系:OpenSSL,zlib,sqlite等。它还为我们的构建系统生成了conanbuildinfo.cmake文件。

在这里插入图片描述
现在库文件已经安装好了,我们来写一个cmake执行我们的.cpp文件,脚本如下:

- CMakeLists.txt


 cmake_minimum_required(VERSION 2.8.12)
 project(MD5Encrypter)

 add_definitions("-std=c++11")

 include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
 conan_basic_setup()

 add_executable(md5 md5.cpp)
 target_link_libraries(md5 ${CONAN_LIBS})

现在我们的目录结构是:
在这里插入图片描述

(CMakeLists.txt 图中文件名写错了!!!!)

现在我们可以进入build文件夹开始执行了

  • windows的执行命令
(win)
$ cmake .. -G "Visual Studio 16"
$ cmake --build . --config Release
  • linux的执行命令
(linux, mac)
$ cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
$ cmake --build .
...
[100%] Built target md5
$ ./bin/md5
c3fcd3d76192e4007dfb496cca67e13b

这里我是用的linux,可以看到我的执行结果如下:
在这里插入图片描述
在这里插入图片描述

我们看一眼最终的生成文件夹:
在这里插入图片描述

我们需要的东西就在bin文件夹里面,进去执行一下:


root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build# cd bin
root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build/bin# ls
md5
root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build/bin# ./md5
c3fcd3d76192e4007dfb496cca67e13b
root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build/bin# ./md5
c3fcd3d76192e4007dfb496cca67e13b
root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build/bin# ./md5
c3fcd3d76192e4007dfb496cca67e13b
root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build/bin# ./md5
c3fcd3d76192e4007dfb496cca67e13b
root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build/bin# ./md5
c3fcd3d76192e4007dfb496cca67e13b
root@iZ2ze99clzuka1844h9qy0Z:~/conanTest/build/bin# ./md5
c3fcd3d76192e4007dfb496cca67e13b

可以看到已经执行成功啦。

四、快速总结conan

  1. conna是个 c++/c 的包管理工具,基于python开发,开源。
  2. conan需要编写conanfile.txt来说明依赖。
  3. conan search -r=conan指令可以在远程仓库搜索包
  4. conan install 指令来根据conanfile.txt安装库文件
  5. 最终生成文件:conanbuildinfo.txt
  6. 编写cmake后编译工程
  7. 完成使用
  • 文中所用命令
# 安装
pip install conan

# 版本
conan --version

# 升级
pip install conan --upgrade  
 
# 搜索包
conan search poco --remote=conan-center
conan search libpng -r=conan-center
  
# 查看  
conan inspect poco/1.9.4
  
# 配置文件名  
conanfile.txt
  
# 设置默认编译版本 
conan profile update settings.compiler.libcxx=libstdc++11 default

# 安装库
conan install .. 


# cmake使用例子
cmake_minimum_required(VERSION 2.8.12)
project(MD5Encrypter)

add_definitions("-std=c++11")

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_executable(md5 md5.cpp)
target_link_libraries(md5 ${CONAN_LIBS})
 
 
 
# linux构建命令
$ cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
$ cmake --build .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

conan-c++包管理工具安装及使用指南 的相关文章

  • java 转json 报错处理机制 案例 .

    JSON lib这个Java类包用于把bean map和XML转换成JSON并能够把JSON转回成bean和DynaBean http kingpingping iteye com blog 1157771 报错处理机制 commons b
  • 关于jquery对象的remove参数中出现伪位置类选择器,出现非预期结果的研究

    记得前几天有人在论坛发帖问了一个关于jquery删除节点的问题 原帖是这样的 xff08 原帖的地址是 xff1a 原帖 xff09 lt ul gt lt li gt 1 lt li gt lt li title 61 34 a 34 g
  • linux源码阅读利器-GNU GLOBAL Source Code Tag System

    学习浏览linux源码 xff0c 如果自己用自带的文本编辑器就太麻烦了 xff0c 但是如果安装强大的lxr那就太麻烦了 xff08 对于非debian用户来说 xff09 xff0c 找了很久找到了一个用起来很不错的源码浏览工具 xff
  • android 4.0.1源码编译,学习错误解决

    主机是fedora 14 linux内核2 6 35 6 swapon交换分区1 5G make version 3 81 官方指定的make版本 xff09 jdk 1 6 磁盘预留空间大概需要大于13G 具体的编译步骤可参考 Fedor
  • android webApp 调试问题解决

    前不久做了个webapp xff0c 在pc上chrome调试都是可以的 但是手机上显示却有点问题 xff0c 所以一直是想在手机浏览器上调试 xff0c 但是一直没有相关支持 xff0c 后来google终于出了chrome beta版
  • android系统源代码分析 书评

    其实接触android应用开发差不多两年了 xff0c 但是实际上并没与多少拿得出手的作品 因为在很长一段时间里我都在问自己android是什么 xff0c 内部怎么运行的 xff0c 为什么我的java代码就可以在linux上运行 xff
  • Fedora18博通430g电信无线拨号上网

    回家折腾了有两三天 xff0c 想让fedora18 也能蹭上网 首当其冲的问题就是fedora 没有为无线网卡安装驱动 xff0c 只能自己慢慢找驱动 费了好久找到上传了驱动下载 xff0c 满心欢喜按照README 编译 xff0c 结
  • VR技术的发展趋势,未来有哪些展望?

    虚拟现实技术Virtual Reality xff0c 缩写为VR xff0c 是一项全新的实用技术 虚拟现实技术包含计算机 电子信息 仿真技术于一体 xff0c 其基本实现方式是计算机模拟虚拟环境从而给人以环境沉浸感 目前来看 xff0c
  • APM2.8 Rover 自动巡航车设计(超声波和红外测距仪的安装和设置)

    xff08 转载 xff09 4 1 ROVER自动巡航车自主壁障的设置 APM2 8的飞控驾驶仪的传感器接入支持超声波 xff0c 电压传感器 xff0c 电流传感器 xff0c 光流传感器 xff0c 红外传感器 其中超声波和红外传感器
  • 学习笔记(一)-古月ROS机器视觉开发入门 -摄像头参数标定

    我们做图像处理为的就是要得到图像的数据 xff0c 在得到这些数据之后怎么对这些数据进行处理 xff0c 这才是我们主要关心的问题 但是 xff0c 在此之前 xff0c 我们还需要做一个非常主要的步骤 对摄像头的参数进行参数标定 安装标定
  • 卸载ROS的方法

    1 卸载全部ros span class token variable sudo span span class token variable apt get span span class token variable remove sp
  • Json String to Java Bean

    34 version 34 1 34 consentId 34 34 b618924f 8a6c 42bc 8553 99e3a8a0fec4 34 34 domain 34 34 cd site15294072534021 com 34
  • 实战PyQt5: 097-键盘事件

    在一个GUI桌面应用中 xff0c 用户和程序之间的交互一般通过键盘和鼠标来完成 xff0c 处理有关键盘和鼠标的事件是一个GUI程序几乎不可或缺的部分 xff0c 下面介绍在Qt中处理输入焦点和键盘事件的相关知识 设置控件的输入焦点 在一
  • 线性代数之——特征值和特征向量

    线性方程 A x 61 b Ax 61 b A x 61 b 是稳定状态的问题 xff0c 特征值在动态问题中有着巨大的重要性
  • Px4源码框架结构图

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • aruco marker 的使用

    安装aruco 教程 xff1a make make install
  • PX4自定义Mavlink消息(一)px4发送

    用于项目需求 xff0c 需要在PX4和QGC新增自定义消息用于通信控制 xff0c 看了很多有关文章 xff0c 我就不明白 xff0c 为啥代码都是复制来复制去的 xff0c 大部分的文章连变量名的起的一样 一点帮助都没有 xff0c
  • QGC接收PX4自定义Mavlink消息(二)qgc接收

    这里补充一些 xff0c 我的px4版本是1 11 0dev xff0c 在ubuntu18 04上开发 xff0c qgc为目前官网最新的版本 xff0c 在windows上上开发 xff0c 大家的源码会因为版本差异而有少许区别 xff
  • OpenWRT无线配置

    默认开启无线网络 修改 xff08 package kernel mac80211 files lib wifi mac80211 sh xff09 vi span class hljs built in package span kern
  • cmake自动添加所有源文件和头文件

    cmake自动添加源文件和头文件 一 背景 项目中需要不断新建源文件和头文件 xff0c 每添加一个文件CMakeLists txt中需要手动加入源文件和指定头文件路径 xff0c 不胜其烦 突发奇想cmake能不能像IDE一样 xff0c

随机推荐

  • github在线修改文章

    github在线添加文件夹 输入文件名字后 xff0c 再输入英文模式下的 即可 修改fork后自己的 xff0c 直接提交 Github 网页上 更新 Fork别人的 Repository https blog csdn net huut
  • GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG解释 + 数据解析

    每个时区跨15 经度 以0 经线为界向东向西各划出7 5 经度 xff0c 作为0时区 即0时区的经度范围是7 5 W 7 5 E 从7 5 E与7 5 W分别向东 向西每15 经度划分为一个时区 xff0c 直到东11区和西11区 东11
  • selenium借助AutoIt识别上传文件Java篇

    https www cnblogs com testlc p 6069460 html 官方网站 xff1a https www autoitscript com site 从网站上下载AutoIt并安装 xff0c 安装完成在菜单中会看到
  • 【学习记录】贝叶斯滤波详解

    贝叶斯滤波详解 贝叶斯滤波的用途 xff08 Bayesian Filtering xff09 xff1a 贝叶斯滤波理论的应用可谓十分广泛 我们知道 xff0c 在机器人运动过程中 xff0c 有两个方面的信息来源 xff0c 一个是通过
  • c++好用的网站

    目录 洛谷www luogu com cn 有道小图灵https oj youdao com csp 维基https oi wiki org 信奥赛一本通http ybt ssoier cn 8088 index php 1 xff0c 洛
  • PX4uORB介绍[1]-常见IPC机制

  • ubuntu修改.bashrc文件

    使用如下命令修改 bashrc文件 xff1a gedit bashrc
  • PX4中文维基——光流部分

    觉得需要用到的内容复制在下面 光流 官网英文原文地址 xff1a http dev px4 io optical flow outdoors html Optical Flow uses a downward facing camera a
  • px4flow源码分析

    Flow c 计算光流用的是 SAD块匹配算法 第一部分是生成直方图 xff0c 第二部分是根据直方图来进行位移向量的计算 外部的 j i的for循环是采样点的循环 xff0c 内部的jj ii的循环是对于一个小邻域的采样 采样点是从 im
  • sudo apt-get update 与upgrade的用法

    在windows下安装软件 xff0c 我们只需要有EXE文件 xff0c 然后双击 xff0c 下一步直接OK就可以了 但在LINUX下 xff0c 不是这样的 每个LINUX的发行版 xff0c 比如UBUNTU xff0c 都会维护一
  • MATLAB标定工具箱的使用

    MATLAB标定工具箱的使用 用VS2012 43 OpenCV2 4 6写的双目标定的程序 xff08 其实就是跑的Samples xff09 xff0c 实验结果一直很不理想 xff0c 查看很多Blog xff0c 说可以先用MATL
  • C语言中%d,%o,%f,%e,%x的意义

    格式说明由 xff05 和格式字符组成 xff0c 如 xff05 d xff05 f等 它的作用是将输出的数据转换为指定的格式输出 格式说明总是由 xff05 字符开始的 不同类型的数据用不同的格式字符 格式字符有d o x u c s
  • 齐次坐标(homogeneous coordinate)

    就是将一个原本是n维的向量用一个n 43 1维向量来表示 二维点 x y 的齐次坐标表示为 hx hy h 由此可以看出 xff0c 一个向量的齐次表示是不唯一的 xff0c 齐次坐标的h取不同的值都表示的是同一个点 xff0c 比如齐次坐
  • win7下安装Ubuntu双系统(安装详解,及踩过的坑)

    前提 xff1a 网上用的u盘装双系统 xff0c 试了n次不是找到文件就是内存未分配 xff0c 各种错误 xff0c 在网上找相关的错误解决方法 xff0c 发现国内的很少 xff0c 国外的话遇到这种情况的也有 xff0c 也试了 x
  • MATLAB绘制三维曲线进行数据分析

    使用plot3函数 xff0c MATLAB官网教程 xff1a http cn mathworks com help matlab ref plot3 html s tid 61 gn loc drop plot3 x1 y1 z1 39
  • 关于STL的个人看法

    下面说的只是个人对STL的认识 不得不说 xff0c STL确实让数据结构的运用变得很简便 但我看来是有利有弊的 先说好处 xff0c 经过STL封装过的数据结构 xff0c 使用起来更加方便快捷 很多次网络赛 xff0c 用map xff
  • Ubuntu/Windows给pip换源

    文章目录 Windows给pip换源Ubuntu给pip换源 Windows给pip换源 打开appdata文件夹 xff0c 在资源管理器的地址栏输入 appdata 后回车 xff1a 或者win 43 r打开命令运行 xff0c 然后
  • The directory '/home/cds/.cache/pip/http' or its parent directory is not owned by the current user

    使用指令 span class token function sudo span span class token function chown span R root home span class token variable USER
  • window10将wsl升级到wsl2

    文章目录 微软 Win10 版本 2004 系统升级WSL到WSL2第一步 xff1a 打开系统虚拟机平台第二步 xff1a 安装WSL2第三步 xff1a 将wsl2设置为默认 WSL 2 中的新增功能将分发版版本设置为 WSL 1 或
  • conan-c++包管理工具安装及使用指南

    本篇文章的代码都在这里备份 文章目录 一 conan介绍1 1 简单介绍1 2 conna特点1 3 跨平台 二 conan全平台安装三 使用conan教程四 快速总结conan 一 conan介绍 跨平台c c 43 43 包管理工具py