2.7 Conan简单使用
一、Conan介绍
Conan 2.0 是专为 C 和 C++ 语言设计的 开源、去中心化、跨平台包管理器,旨在帮助开发者创建、共享和管理原生二进制文件。
支持以下特性:
- 系统: Windows、Linux、macOS、FreeBSD、Solaris
- 架构: x86、x64、arm、arm64
- 构建系统: CMake、Visual Studio (MSBuild)、Autotools、Makefiles、Meson、SCons
- 编译器: gcc、cl.exe、clang、apple-clang、intel
- 库类型: static、shared
- 编译类型: Debug、Release
Conan组成:
- Conan 客户端:用于管理依赖、拉取或构建二进制包。
- conan_server:一个轻量级服务器,用于在本地或私有网络中托管 Conan 包。
- JFrog Artifactory Community:是一个功能强大的包管理服务器,Conan 官方推荐用于托管 Conan 包。
- ConanCenter:是 Conan 官方维护的中央公共仓库,存储大量开源 C/C++ 库的 Conan 包。
注意:Conan不存储源码,只记录源码下载地址
Conan 文档地址:docs.conan.org.cn
二、Conan安装
2.1 使用 pip 安装(推荐)
通过pip安装,方便安装不同版本Conan和易于升级。
这里使用python的virtualenvs管理虚拟环境,先创建虚拟环境,再在虚拟环境中安装Conan,并将Conan的安装路径添加环境变量中。
安装流程:
-
安装Python 3.12(Conan要求Python的版本必须大于等于3.6)
- Python 下载地址:www.python.org/downloads/windows
- 注意:修改Python的安装路径为D盘
-
安装virtualenvs依赖,使用virtualenvs管理虚拟环境。
- virtualenvs依赖库的帮助文档:virtualenvwrapper-win
- 安装virtualenvs:
pip install virtualenvwrapper-win
-
指定虚拟环境的安装路径(修改WORKON_HOME环境变量)
- 虚拟环境默认安装路径是:
%USERPROFILE%\Envs
- 新建WORKON_HOME环境变量
- 虚拟环境默认安装路径是:
-
创建Conan虚拟环境
- 创建虚拟环境:
mkvirtualenv --python=3.12.11 conan
(这里的conan
是虚拟环境的名称) - 这里指定的Python版本
--python=3.12.11
,必须是系统已安装的。 - 这是安装后的虚拟环境
- 创建虚拟环境:
-
在虚拟环境中安装Conan
- 进入虚拟环境:
workon conan
(这里的conan
是虚拟环境的名称) - 安装Conan:
pip install conan
- 进入虚拟环境:
-
将Conan的scripts添加到系统环境变量中,使在cmd等终端中能直接使用Conan
- 将虚拟环境的Scripts添加到环境变量中
- 启动cmd,测试Conan是否能使用。
- 将虚拟环境的Scripts添加到环境变量中
-
升级Conan (慎用)
- 进入虚拟环境:
workon conan
- 升级命令:
pip install conan --upgrade
- 进入虚拟环境:
2.2 通过exe安装
这种方式不要求安装Python,可以直接安装。
程序下载地址:conan.org.cn/downloads
三、Conan使用
3.2 小案例
项目结构:
.
├── conanfile.txt # 记录项目 用到的依赖
├── CMakeLists.txt # cmake的配置文件
└── src└── main.c # 源码
conanfile.txt文件内容:
[requires] # 记录依赖
zlib/1.2.11 # 依赖/版本号[generators] # 配置生成构建系统文件
CMakeDeps # 生成Findxxx.cmake 用于查找依赖库
CMakeToolchain # 生成conan_toolchain.cmake 配置工具链[layout]
cmake_layout # 标准 CMake 布局
CMakeLists.txt文件内容:
cmake_minimum_required(VERSION 3.15)
project(compressor C)# 包含 Conan 生成的工具链文件
include(${CMAKE_BINARY_DIR}/generators/conan_toolchain.cmake)# 查找依赖库
find_package(ZLIB REQUIRED) add_executable(${PROJECT_NAME} src/main.c)
target_link_libraries(${PROJECT_NAME} ZLIB::ZLIB)
main.c文件内容:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>#include <zlib.h>int main(void) {char buffer_in [256] = {"Conan is a MIT-licensed, Open Source package"};char buffer_out [256] = {0};z_stream defstream;defstream.zalloc = Z_NULL;defstream.zfree = Z_NULL;defstream.opaque = Z_NULL;defstream.avail_in = (uInt) strlen(buffer_in);defstream.next_in = (Bytef *) buffer_in;defstream.avail_out = (uInt) sizeof(buffer_out);defstream.next_out = (Bytef *) buffer_out;deflateInit(&defstream, Z_BEST_COMPRESSION);deflate(&defstream, Z_FINISH);deflateEnd(&defstream);printf("Uncompressed size is: %lu\n", strlen(buffer_in));printf("Compressed size is: %lu\n", strlen(buffer_out));printf("ZLIB VERSION: %s\n", zlibVersion());return EXIT_SUCCESS;
}
生成Conan的配置文件(记系统、架构、编译器、库类型、编译类型等信息):
conan profile detect --force
生成的默认配置default在:C:\Users\wujh\.conan2\profiles
目录下。
C:\Users\wujh>conan profile show
Host profile:
[settings] # 目标配置
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=192
os=WindowsBuild profile:
[settings] # 编译配置
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=192
os=Windows
安装依赖:
conan install . --build=missing # 仅构建本地缓存中缺少的包
构建和编译项目:
cd build
cmake ..
cmake --build . --config Release
注意:
- conan安装依赖时,已生成工具链配置文件conan_toolchain.cmake,且在CMakeLists.txt文件已配置。
- 所以在配置cmake项目时,可以不用设置
-G "Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake"
参考文章:使用 Conan 构建简单的 CMake 项目
3.1 常用命令
-
搜索本地或远程包:
conan search zlib/* -r=conancenter
- 在线搜索:conancenter
-
生成Conan的配置文件
- 生成默认配置文件:
conan profile detect --force
- 指定配置文件名称:
conan profile detect --name=mingw64
- 两种常见的配置文件:
- 编译器是VS2019的MSVC:
[settings] arch=x86_64 build_type=Release compiler=msvc compiler.cppstd=14 compiler.runtime=dynamic compiler.version=192 os=Windows
- 编译器是MSYS2的MinGW64的GCC:
[settings] os=Windows arch=x86_64 compiler=gcc compiler.version=15.1 compiler.libcxx=libstdc++11 build_type=Release
- 编译器是VS2019的MSVC:
- 配置文件关键配置字段说明
- os:操作系统(Windows/Linux/macOS)
- arch:架构(x86_64/armv8)
- compiler:编译器类型(gcc/msvc/clang)
- compiler.version:编译器版本(如 13 对应 GCC 13)
- compiler.libcxx:C++ 标准库(libstdc++11/libc++)
- build_type:构建类型(Release/Debug)
- 生成默认配置文件:
-
查看Conan的配置文件
- 查看所有可用的Profile:
conan profile list
- 查看默认配置文件:
conan profile show
- 查看指定配置文件:
conan profile show -pr=mingw64
- 查看所有可用的Profile:
-
清理缓存
- 清理所有缓存:
conan cache clean "*"
- 清理指定库的缓存:
conan remove ffmpeg/* -c
- 清理所有缓存:
-
安装依赖并生成构建系统文件:
- 使用默认配置构建
conan install . --build=missing
--build
参数missing
仅编译不存在的包always
强制所有依赖从源码构建(忽略预编译包)never
禁用所有的源码构建,只使用预编译二进制包。[pattern]
通配符,指定报名进行源码构建 如--build=zlib*
仅构建zlib及其依赖。outdated
当二进制包过期时重构cascade
当某个包被构建时,级联构建其所有依赖。
- 指定编译文件
conan install . --build=missing --profile:host=mingw64 --profile:build=mingw64
--profile:host=mingw64
指定目标的配置文件-profile:build=mingw64
指定构建的配置文件
- 安装后的依赖库位置:
- 使用默认配置构建
3.2 conanfile.txt常见参数
(1) [requires] 声明项目的依赖库
[requires]
poco/1.9.4 # 指定使用 POCO 库的 1.9.4 版本。
zlib/1.2.11 # 指定使用 zlib 库的 1.2.11 版本。
boost/[>=1.78.0 <1.80.0] # 支持版本范围控制,指定 Boost 库的版本范围(1.78.0 到 1.79.x)。
(2)[options] 为依赖包指定构建选项
[options]
poco/*:shared=True # 指定 POCO 库构建为共享库(.dll 或 .so)
zlib/*:shared=False # 指定 zlib 库构建为静态库(.lib 或 .a)
(3)[generators] 指定 Conan 生成的构建系统集成文件
[generators]
CMakeDeps # 生成 CMake 所需的依赖信息文件(如 poco-config.cmake)
CMakeToolchain # 生成 CMake 工具链文件,配置编译器和构建设置
常见生成器:
CMakeDeps
:为 CMake 项目生成依赖配置文件(如 xxx-config.cmake 或 Findxxx.cmake),允许 CMake 通过 find_package() 查找依赖。CMakeToolchain
:生成 CMake 工具链文件(conan_toolchain.cmake),用于配置 CMake 的编译器、构建类型和其他构建设置。MSBuildDeps
:为 Visual Studio 项目生成 MSBuild 属性文件(.props 文件),将依赖信息集成到 MSBuild 系统中。XcodeDeps
:为 Xcode 项目生成依赖配置,集成到 macOS/iOS 的 Xcode 构建系统中。pkg_config
:为每个依赖生成 pkg-config 文件(.pc 文件),供支持 pkg-config 的构建系统(如 Autotools、Make)使用。
如何选择生成器
- CMake项目 推荐使用 CMakeDeps + CMakeToolchain。
- Visual Studio项目:使用 MSBuildDeps。
- Xcode项目 XcodeDeps。
- Linux/Autotools项目:使用 pkg_config。
(4) [layout] 定义项目的目录结构
[layout]
cmake_layout # 标准 CMake 布局
(5)[tool_requires] 声明构建项目所需的工具依赖
[tool_requires]
cmake/3.24.0 # 指定使用 CMake 3.24.0 作为构建工具。
ninja/1.10.2 # 指定使用 Ninja 1.10.2 作为构建系统。
注意:这些工具只是作为项目构建和编译时使用,在构建和安装这些工具时没有使用。