Conan安装与C++第三方环境配置保姆级图文教程(附速查字典)

目录

  • 1 什么是Conan?
  • 2 Conan安装与配置
  • 3 Conan的常见操作
    • 3.1 搜索指定包
    • 3.2 安装指定包
    • 3.3 本地包管理
    • 3.4 查看项目依赖
  • 4 Conan构建项目案例

1 什么是Conan?

Conan是一个开源的C/C++包管理器,用于管理和构建C/C++项目所需的依赖库。传统上,C/C++项目的依赖项管理比较繁琐,需要手动下载、构建和配置各种库。随着项目规模的扩大和复杂度的增加,管理和编译第三方库变得越来越困难,容易出现版本冲突和兼容性问题。

在这里插入图片描述

类似于Python中的第三方管理Anaconda,开发人员可以通过Conan轻松地下载、构建、安装和管理各种C/C++库,并将它们集成到他们的项目中。Conan支持多种操作系统和编译器,可以帮助开发人员在不同平台上管理依赖项,如果要将项目移植到新的开发环境或构建系统,Conan可以帮助快速重建项目所需的依赖关系,加快构建过程,提高项目构建的效率。

举一个例子,假设需要开发一个跨平台的C++项目,项目使用OpenCV库来处理图像。使用Conan可以很容易地在项目中集成OpenCV,并确保项目在Windows、Linux和macOS上都可以顺利构建。具体地,通过Conan搜索OpenCV库并下载安装,然后在项目中引用它,Conan会自动处理依赖关系并确保构建成功

2 Conan安装与配置

按照以下步骤进行:

  • 安装conan
    pip install conan
    conan --version
    
  • 配置conan远程仓库
    conan remote add conancenter https://center.conan.io
    

3 Conan的常见操作

3.1 搜索指定包

在远程仓库中搜索指定的包

conan search osqp --remote=conancenter

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

在这里插入图片描述
也可以在Conan官网直接搜索

在这里插入图片描述

3.2 安装指定包

编写下列安装文件(二选一):

  • 编写conanfile.txt
    [requires]
    osqp/0.6.3
    [generators]
    CMakeDeps
    CMakeToolchain
    [layout]
    cmake_layout
    
  • 编写conanfile.py
    from conan import ConanFile
    from conan.tools.cmake import cmake_layoutclass ExampleRecipe(ConanFile):settings = "os", "compiler", "build_type", "arch"generators = "CMakeDeps", "CMakeToolchain"def requirements(self):self.requires("osqp/0.6.3")def layout(self):cmake_layout(self)
    

接着在包含conanfile.txtconanfile.py的目录执行安装命令

conan install . --build=missing

3.3 本地包管理

  • 列出本地所有安装的第三方依赖

    conan search
    

    在这里插入图片描述

  • 删除指定包

    conan remove pkg/version
    

    在这里插入图片描述

3.4 查看项目依赖

conan info .

在这里插入图片描述

4 Conan构建项目案例

项目结构如下,本文测试osqp库的conan安装

.
├── 3rd
│   ├── conanfile.py
│   ├── conaninfo.txt
│   └── conan_install.sh
├── CMakeLists.txt
└── src└── test_conan.cc

conanfile.txtconanfile.py的编写与3.2节相同,启动安装脚本conan_install.sh,其内容即为conan install . --build=missing,这里做了一层封装

./conan_install.sh

接着编写CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(conan_test)get_filename_component(PROJECT_ROOT_DIR ${CMAKE_SOURCE_DIR} DIRECTORY)
include(${CMAKE_SOURCE_DIR}/3rd/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(${PROJECT_NAME}src/test_conan.cc
)target_include_directories(${PROJECT_NAME} PUBLIC${CONAN_INCLUDE_DIRS}
)target_link_libraries(${PROJECT_NAME}${CONAN_LIBS}
)

编写测试文件

#include <osqp/osqp.h>int main(int argc, char **argv) {c_float P_x[3] = {4.0, 1.0, 2.0, }; c_int P_nnz = 3; c_int P_i[3] = {0, 0, 1, }; c_int P_p[3] = {0, 1, 3, }; c_float q[2] = {1.0, 1.0, };c_float A_x[4] = {1.0, 1.0, 1.0, 1.0, };c_int A_nnz = 4;c_int A_i[4] = {0, 1, 0, 2, };c_int A_p[3] = {0, 2, 4, };c_float l[3] = {1.0, 0.0, 0.0, };c_float u[3] = {1.0, 0.7, 0.7, };c_int n = 2;c_int m = 3;c_int exitflag = 0;OSQPWorkspace *work;OSQPSettings  *settings = (OSQPSettings *)c_malloc(sizeof(OSQPSettings));OSQPData      *data     = (OSQPData *)c_malloc(sizeof(OSQPData));if (data) {data->n = n;data->m = m;data->P = csc_matrix(data->n, data->n, P_nnz, P_x, P_i, P_p);data->q = q;data->A = csc_matrix(data->m, data->n, A_nnz, A_x, A_i, A_p);data->l = l;data->u = u;}if (settings) {osqp_set_default_settings(settings);settings->alpha = 1.0; // Change alpha parameter}exitflag = osqp_setup(&work, data, settings);osqp_solve(work);if (data) {if (data->A) c_free(data->A);if (data->P) c_free(data->P);c_free(data);}if (settings) c_free(settings);return exitflag;
}

编译测试工程

mkdir build
cd build
cmake ..
make

在这里插入图片描述
运行可执行文件

cd bin/
./conan_test

得到终端输出

在这里插入图片描述
表明链接成功


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【启明智显分享】2.8寸触摸串口屏SC05 Plus应用于智能血压计

2.8寸SC05 Plus串口触摸屏&#xff0c;带WIFI/蓝牙 我国高血压流行病调查显示&#xff0c;成人高血压患病率为27.9&#xff05;、知晓率为46.9&#xff05;、治疗率为40.7&#xff05;、控制率为15.3&#xff05;。由此可见高血压的患病率高&#xff0c;但知晓率和治疗率低&…

【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(1)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

高危行业的安全守护者,顶坚防爆手机无惧挑战

高危行业的安全守护者&#xff0c;防爆手机以卓越性能&#xff0c;无惧极端挑战&#xff0c;为每一位前线工作者筑起坚不可摧的安全防线。石油勘探的深邃海洋、化工生产的复杂车间、矿山的幽深隧道……这些高危行业中&#xff0c;每一步都需谨慎前行&#xff0c;每一刻都需安全…

基于springboot的校园商铺管理系统

功能结构图&#xff1a; 实现图&#xff1a; 后台功能&#xff1a; 商品管理 公告管理 前台页面 详情 订单 我的订单

SciencePub学术刊源 | 7月SCI/SSCI/EI/CNKI刊源表已更新!(内含TOP及CCF推荐)

【SciencePub学术】我处SciencePub学术2024年7月SCI/SSCI/EI/CNKI刊源表已更新&#xff01;内含多本中科院TOP、CCF推荐以及进展超顺的优质期刊&#xff0c;最快1-3个月录用&#xff01; 计算机领域重点SCI 环境地质化学领域重点SCI 生物医学领域重点SCI 数学材料领域重点SCI 各…

同星TTS系列产品全新亮相:让开发测试变得更简单!

TTS系列产品 如果需要完整地测试 ECU&#xff0c;不仅需要将通信网络连接到测试系统&#xff0c;还需要连接 I/O 接口。同星的TTS测试系统将连接 I/O 通道所需的所有电路组件集成在一个模块中&#xff0c;可以极大地简化测试台架和HIL测试系统的设置&#xff0c;提高搭建和测试…

武汉星起航:跨境电商领域的领航者,助力合作伙伴全球布局

在跨境电商的汹涌浪潮中&#xff0c;武汉星起航电子商务有限公司如同一颗璀璨的明星&#xff0c;自2017年起便以亚马逊自营店铺为核心业务&#xff0c;不断积累实战运营经验&#xff0c;逐步建立了自己在市场中的稳固地位。随着2020年公司的正式成立&#xff0c;武汉星起航明确…

学习笔记——动态路由——IS-IS中间系统到中间系统(背景)

一、IS-IS技术背景 1、前言 IS-IS最初是国际标准化组织ISO(the International Organization for Standardization)为它的无连接网络协议CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议。 和OSPF一样&#xff0c;IS-IS也是一种基于链路状态并使用最短路径优先…

浅谈制造企业如何借力EHS,让安全管理上新台阶

当今商业环境中&#xff0c;企业管理不仅关注经济效益&#xff0c;更将目光投向了长远发展的基石——EHS&#xff08;环境Environment、健康Health、安全Safety&#xff09;管理体系。这一体系的崛起&#xff0c;标志着企业管理理念的一次深刻变革&#xff0c;它如同企业的守护…

Chisel学习笔记(1)——Chisel安装与Verilog代码仿真

参考链接&#xff1a; https://www.chisel-lang.org/docs/installation 使用Chisel语言编写硬件描述语言&#xff0c;相比于使用Verilog会更加地灵敏快捷&#xff0c;Coding效率更高&#xff0c;但似乎debug会出现一些小问题。但新工具还是要尝试一下才知道好不好用。 1 安装C…

构建RAG+nebula graph(知识图谱KG)

目标&#xff1a;通过利用 LlamaIndex 和 NebulaGraph 为费城费城人队&#xff08;Philadelphia Phillies&#xff09;构建一个RAG流程&#xff0c;深入探讨知识图谱。 NebulaGraph 是市场上最好的知识图谱数据库之一。它是开源的、分布式的&#xff0c;并且能够处理具有亿万边…

【linux】网络基础(2)——udp协议

文章目录 引言udp协议的特点udp的头部结构UDP的工作原理简单的UDP网络程序套接字的认识udp服务端代码udp客户端代码服务端运行 引言 用户数据报协议&#xff08;User Datagram Protocol, UDP&#xff09;是一种无连接的传输层协议。它是因特网协议家族的一部分&#xff0c;定义…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构&#xff0c;如&#xff1a; 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个&#xff0c;如线性表、栈、队列&#xff0c;每一个节点和其它节点之间的关系 一个对一个…

超酷的打字机效果?分享 1 段优质 CSS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 900 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段优质 CSS 代码片段&#xff0c;实现打字机般的效果或其他类似的离散动画效果。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代…

Python入门 2024/7/2

目录 格式化的精度控制 字符串格式化 对表达式进行格式化 小练习&#xff08;股票计算小程序&#xff09; 数据输入 布尔类型和比较运算符 if语句 小练习&#xff08;成人判断&#xff09; if-else语句 if-elif-else语句 练习&#xff1a;猜猜心里数字 嵌套语句 猜…

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …

offer7.重建二叉树

根据二叉树的前序遍历和中序遍历重建二叉树 问题描述&#xff1a;输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如&#xff0c;输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3…

二叉树之遍历OJ(含迭代)

目录 1.递归实现 前言 &#xff08;1&#xff09;前序遍历 &#xff08;2&#xff09;中序遍历 &#xff08;3&#xff09;后序遍历 2.迭代实现 前言 &#xff08;1&#xff09;前序遍历 方法一 方法二 &#xff08;2&#xff09;中序遍历 方法一 方法二 &#x…

BIOS设置与系统分区

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 一BIOS 1破解密码的前提 2B…

《植物大战僵尸融合版》1.0预览版下载以及安装教程

游戏介绍 《植物大战僵尸融合版》是一款基于经典游戏《植物大战僵尸》的创新改版&#xff0c;由B站UP主蓝飘飘fly开发。这款游戏的特色在于引入了植物融合系统&#xff0c;允许玩家将两种不同的植物合体&#xff0c;创造出具有新特性的植物&#xff0c;从而带来全新的策略对战…