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;武汉星起航明确…

基于微信小程序的优鲜易购平台设计与实现

系统摘要 随着网络科技的迅速发展以及社会大众消费习惯的转变,微信小程序逐渐以其便捷性和易用性引起了人们的广泛关注。本文意在研发设计并实现一种基于微信小程序开发的优鲜商品易购系统,即一个专注于生鲜产品网上选购服务的买菜网站,利用SpringBoot和Vue.js的技术栈…

学习笔记——动态路由——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…