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

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

得到终端输出

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


🔥 更多精彩专栏


👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Winter`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值