c++包管理器conan的使用

前言
原来 c/c++ 也是有包管理器的。
conan
vcpkg 和 conan 是两个 c/c++ 流行的包管理器,我选择 conan 是因为它灵活,不像 vcpkg 非要和微软绑定(我的编译器也是采用的 MinGW,不喜欢微软的编译器)
安装 python
conan 依赖 pip,所以需要先安装 python。
python 安装过于简单,此处略。
需要注意的是,conan 部分功能依赖于 python,需要考虑安装合适的 python 版本。
切换 pip 源
pip 默认源在国内访问速度很慢,可以切换为国内源。
1  | # 如果pip的可执行文件又被更改过文件名,需要使用更改后的文件名,比如当pip.exe改为pip3.exe时,需要使用pip3  | 
切换完成后,可以使用下面命令检测是否切换成功。
1  | pip config list  | 
安装 conan
1  | pip install conan  | 
检测 conan 是否安装成功
1  | conan --version  | 
配置第三方库默认安装目录
conan 会默认在当前用户目录(C 盘)下安装第三方库,可以通过修改 global.conf 文件来修改默认安装目录。
找到 global.conf 文件,一般在当前用户目录下的 .conan2 目录中可以找到。添加如下内容。
1  | core.cache:storage_path = C:\Users\danielm\my_conan_storage_folder  | 
core.cache:storage_path
Absolute path to a folder where the Conan packages and the database of the packages will be stored. This folder will be the heaviest Conan storage folder, as it stores the binary packages downloaded or created.
安装 meson(可选)
1  | pip install meson  | 
安装 ninja(可选)
https://github.com/ninja-build/ninja/releases
安装 nasm(可选)
搜索远程仓库
1  | # 例如需要搜索jsoncpp的包,不加 -r 表示搜索本地仓库  | 
Demo
项目目录结构如下:
- conanfile.txt
 - CMakeLists.txt
 - src/
- main.cpp
 
 - build/
 
conanfile.txt
conanfile.txt 是 conan 在本项目下的配置文件,描述项目所需的依赖库,以及项目的生成器。
最新版本 conan(2.10.2) 不再支持 cmake 生成器,仅支持 CMakeDeps、CMakeToolchain
1  | [requires]  | 
jsoncpp 是一个帮助 c++处理 json 数据的库,在 conanfile.txt 中添加如下内容,表示依赖 jsoncpp/1.9.5 版本的 jsoncpp。
CMakeLists.txt
CMakeLists.txt 是 cmake 在本项目下的配置文件,描述了项目的编译选项,以及链接依赖库,参考在 Windows 下使用 CMake 构建和管理第三方库
1  | cmake_minimum_required(VERSION 3.15)  | 
src/main.cpp
1  | 
  | 
编译
编译时可能会需要 python、ninja、nasm 等工具,如遇报错,请优先查看工具是否安装,并且是否兼容。
1  | # 第一次编译时,需要执行下列命令,获取平台信息  | 
profile
使用 conan profile detect 命令自动生成的 profile 文件会根据环境的不同生成不同的内容。
参考 windows 环境下会生成的内容:
1  | [settings]  | 
参考 linux 环境下会生成的内容:
1  | [settings]  | 
自定义 profile
如果你想交叉编译,则可以通过自定义 profile 来实现。
例如在 Linux 系统上构建 windows 项目,则可以通过自定义 profile 来实现。参考内容如下:
1  | [settings]  | 
可以注意到,os 被替换为了 Windows,代表编译目标的运行环境。
添加编译器路径到系统环境变量
在执行 conan profile detect 之前,一定要确保编译器已经在系统环境变量中配置好。最好是在系统中永久配置好,当然如果你想临时设置,也可以通过命令行设置。
特别注意:CC 和 CXX 的值,一定要以斜杠(/)分隔,不用使用反斜杠(\),否则构建会失败,这是因为构建期间会涉及到 Windows 文件系统之外的文件系统,比如 linux 系统就不支持使用反斜杠作为路径分隔符。
1  | # 临时设置(cmd)  | 
1  | # 临时设置(powershell)  | 
如果是在Linux系统上进行交叉编译
1  | export CC=x86_64-w64-mingw32-gcc  | 
其他
本地库目录
一般 conan 安装的包都会保存在 C:\Users\yourUserName.conan2\p\b 目录下,安装时会自动添加到系统环境变量中。代码中可以使用尖括号 <> 来引用本地库,例如:
1  | 
vscode 语法高亮
需要在项目中添加 .vscode\c_cpp_properties.json 文件,
添加 “C:/Users/yourUserName/.conan2/p/b/**“,
完整内容如下:
1  | {  | 
参考
Build a simple CMake project using Conan - conan 2.10.2 
C/C++ 包管理器 Conan 使用指南 - conan 1.48.0 
在 Windows 下使用 CMake 构建和管理第三方库
- 标题: c++包管理器conan的使用
 - 作者: 木头的喵喵拖孩
 - 创建于: 2024-12-11 14:58:40
 - 更新于: 2024-12-30 17:56:18
 - 链接: https://blog.xx-xx.top/2024/12/11/c-包管理器conan的使用/
 - 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。