Conan是C++主流跨平台依赖管理工具,核心流程为“配置→声明→构建→消费”:pip安装后配置国内源与profile;用conanfile.txt声明依赖并生成CMake配置;通过conan install下载并锁定依赖;最后在CMake中集成toolchain与find_package完成构建。

Conan 是 C++ 领域最主流的跨平台依赖管理工具,它不绑定构建系统,能和 CMake、Meson、Bazel 等无缝协作,也支持私有仓库和二进制缓存。用好 Conan 的关键不是记命令,而是理解“配置 → 声明 → 构建 → 消费”这个闭环。
1. 安装与基础配置
推荐用 pip 安装最新稳定版(避免系统包管理器的老旧版本):
pip install conan
首次运行 conan 会自动创建默认配置目录(~/.conan2)。建议马上配置国内加速源,避免被墙卡住:
立即学习“C++免费学习笔记(深入)”;
- 执行 conan remote add center https://center.conan.io(官方新中心库,替代已停用的 conancenter)
- 如需更快体验,可添加镜像远程(例如清华源,需确认其是否同步 v2 协议)
- 运行 conan profile detect 自动识别本地编译器和架构,生成默认 profile(路径:~/.conan2/profiles/default)
2. 在项目中声明依赖(conanfile.py 或 conanfile.txt)
推荐新手从 conanfile.txt 入手,轻量直观;工程成熟后可升级为 conanfile.py 获得完整逻辑控制能力。
示例 conanfile.txt:
[requires]
fmt/10.2.1
spdlog/1.13.0
[generators]
CMakeDeps
CMakeToolchain
[layout]
cmake_layout
说明:
- [requires] 列出你直接用的库及其精确版本(Conan 默认启用 semver 兼容匹配)
- [generators] 决定如何把依赖信息转成构建系统能读的文件;CMakeDeps + CMakeToolchain 是现代 CMake(3.23+)推荐组合
- [layout] 告诉 Conan 你的源码结构,让生成的 toolchain 文件自动适配 build 目录层级
3. 下载依赖并生成构建配置
进入项目根目录(含 conanfile.txt),执行:
conan install . --build=missing -o *:shared=True
关键参数解释:
- --build=missing:只编译本地没有预编译二进制的包(多数开源库在 ConanCenter 有 Windows/macOS/Linux 各平台二进制,跳过编译)
- -o *:shared=True:全局开启动态链接(可按需改成 -o fmt:shared=False 单独控制)
- 成功后,会在当前目录生成 conan.lock(锁定所有传递依赖版本)和 generators/ 目录(含 cmake 用的 xxx-config.cmake 和 toolchain file)
4. 在 CMake 中接入 Conan 生成的配置
修改你的 CMakeLists.txt,在 project() 之后、add_executable() 之前加入:
include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake)
find_package(fmt CONFIG REQUIRED)
find_package(spdlog CONFIG REQUIRED)
然后在 target_link_libraries 中引用:
target_link_libraries(myapp PRIVATE fmt::fmt spdlog::spdlog)
最后正常构建:
mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
cmake --build .
基本上就这些。Conan 的核心价值在于把“找库、编译库、连头文件、设链接路径、处理 ABI 差异”这些脏活封装成可复现的自动化流程。初期多跑几遍 conan install 和 conan list 查看依赖树,比死记文档更有效。










