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

news2025/1/16 1:05:21

目录

  • 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_layout
    
    class 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.coloradmin.cn/o/1885951.html

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

相关文章

BIOS设置与系统分区

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

CrossViT:用于图像分类的交叉注意多尺度Vision Transformer

提出了一种双支路Transformer来组合不同大小的图像补丁(即变压器中的令牌)以产生更强的图像特征。方法处理具有不同计算复杂度的两个独立分支的小补丁和大补丁令牌,然后这些令牌纯粹通过注意多次融合以相互补充。此外,为了减少计算量,开发了一个简单而有效的基于交叉关注的令…

98 - IDEA远程调试服务器Java程序

Java 提供了一套标准的调试协议&#xff08;JDWP - Java Debug Wire Protocol&#xff09;&#xff0c;允许调试器&#xff08;IDE&#xff09;与被调试程序&#xff08;应用&#xff09;之间进行通信。 1.服务器特定命令启动程序 在服务器上以以下命令启动Java程序 java -a…

linux 离线安装docker

测试服务器&#xff1a;银河麒麟V10 x86_64 注意&#xff1a;推荐使用国内的镜像站下载&#xff0c;因为官网不挂梯子无法访问&#xff0c;我用的是清华大学开源软件镜像站 一、下载离线包&#xff1a; 官网下载docker离线包 下载地址&#xff1a;https://download.docker.c…

老师怎样一键发布期末考试成绩?

期末考试的钟声一响&#xff0c;老师们便开始了紧张的阅卷工作。成绩出来后&#xff0c;他们又面临着一项繁琐的任务——将成绩单逐一私信给每位学生的家长。这不仅耗费了大量时间&#xff0c;也让老师们在繁忙的期末工作中倍感压力。期末老师的工作已经够多够繁琐&#xff0c;…

仪器校准的概念与定义,计量校准是什么?

仪器校准的定义&#xff0c;在之前所颁布的《国际计量学词汇 基础和通用概念及相关术语》文件中&#xff0c;已经有了明确说明&#xff0c;而该文件做了修改以后&#xff0c;在后续新的定义中&#xff0c;仪器校准具体被分为两部分&#xff0c;第一步是将被计量仪器和计量校准的…

汽车制造企业中MES管理系统还有哪些作用

在当今汽车制造业的飞速发展中&#xff0c;数字化转型已成为企业不可或缺的战略选择。在这个转型浪潮中&#xff0c;MES管理系统扮演着至关重要的角色&#xff0c;成为连接企业资源计划&#xff08;ERP&#xff09;与车间自动化系统的关键纽带。它不仅推动了生产流程的智能化、…

SpringSecurity中文文档(Servlet Persisting Authentication)

Persisting Authentication 用户第一次请求受保护的资源时&#xff0c;系统会提示他们输入凭据。提示凭据的最常见方法之一是将用户重定向到登录页。对于请求受保护资源的未经身份验证的用户&#xff0c;总结的 HTTP 交换可能如下所示: Example 1. Unauthenticated User Requ…

数据库测试数据准备厂商 Snaplet 宣布停止运营

上周刚获知「数据库调优厂商 OtterTune 宣布停止运营」。而今天下班前&#xff0c;同事又突然刷到另一家海外数据库工具商 Snaplet 也停止运营了。Snaplet 主要帮助开发团队在数据库中生成仿真度高且合规的测试数据。我们在年初还撰文介绍过它「告别手搓&#xff01;Postgres 一…

deepin基于rsync和apt-mirror同步软件源及构建本地内网源

一、rsync方式 参考官方文档地址&#xff1a; https://www.deepin.org/index/docs/wiki/05_HOW-TO/08_%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F/%E8%BD%AF%E4%BB%B6%E6%BA%90.md 仓库同步命令所需大小软件仓库rsync -av --delete-after rsync.deepin.com::deepin/ /var/www/deep…

利用STM32的定时器输出PWM方波

脉冲宽度调制 (PWM) &#xff0c;是英文“ Pulse Width Modulation ”的缩写&#xff0c;简称脉宽调制&#xff0c;是利用 微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点&#xff0c;就是对脉冲宽 度的控制。 图中&#xff0c;我们假定定时器工作在…

【neo4j图数据库】入门实践篇

探索数据之间的奥秘&#xff1a;Neo4j图数据库引领新纪元 在数字化浪潮汹涌的今天&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的爆炸性增长和数据关系的日益复杂&#xff0c;传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互…

TypeScript 中 const enum 和 enum 的核心区别在哪?日常开发应该使用哪个?

编译结果 enum 会生成一个对象&#xff0c;引用的地方保持对其引用 const enum 会擦除 enum 定义的代码&#xff0c;引用的地方会生成 inline code 使用enum&#xff1a; 使用const enum&#xff1a; PS&#xff1a;编译选项 preserveConstEnums 可以使 const enum 不去擦除 …

自动扫描范围在减少剂量多相CT肝脏成像中的应用:基于CNN和高斯模型| 文献速递-深度学习自动化疾病检查

Title 题目 Automatic scan range for dose-reduced multiphase CT imaging of theliver utilizing CNNs and Gaussian models 自动扫描范围在减少剂量多相CT肝脏成像中的应用&#xff1a;基于CNN和高斯模型 01 文献速递介绍 肝癌是全球癌症死亡的第四大原因&#xff0c;每…

工作效率倍增:最常用的电脑快捷键大全

文章目录 1. CtrlA&#xff08;全选&#xff09;2. CtrlC&#xff08;复制&#xff09;3. CtrlX&#xff08;剪切&#xff09;4. CtrlV&#xff08;粘贴&#xff09;5. CtrlZ&#xff08;撤销&#xff09;6. CtrlY&#xff08;恢复&#xff09;7. Ctrl1,2,3...&#xff08;切换…

武汉星起航:成功挂牌上股交,引领跨境电商行业进入全新发展阶段

2023年10月30日&#xff0c;武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示&#xff0c;这一里程碑式的事件标志着武汉星起航正式登陆资本市场&#xff0c;开启了公司发展的新篇章。作为亚马逊跨境电商领域的领军企业之一&#xff0c;武汉星起航此次挂牌不仅是…

SET加密:电子商务安全的基石

随着电子商务的飞速发展&#xff0c;如何确保在线交易的安全性和可信度已成为消费者、商家和金融机构共同关注的焦点。SET协议&#xff08;Secure Electronic Transaction&#xff09;作为一种安全电子交易的国际标准&#xff0c;凭借其卓越的安全性能和广泛的行业认可&#xf…

Linux——查找文件-find(详细)

查找文件-find 作用 - 按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件 格式 find 查找路径 查找条件 具体条件 操作 注意 - find命令默认的操作是print输出 - find是检索文件的&#xff0c;grep是过滤文件中字符串 参数 参数 …

四川赤橙宏海商务信息咨询有限公司是真的吗?

在数字经济的浪潮下&#xff0c;电商行业日新月异&#xff0c;各种创新模式层出不穷。其中&#xff0c;抖音电商以其独特的社交属性和短视频传播优势&#xff0c;迅速崛起成为电商领域的一匹黑马。在这个风起云涌的市场中&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其专…