Conan 包管理器
Conan 是 C++ 最功能完整的包管理器,支持二进制缓存、多平台、多编译器、自定义配方,是大型项目的首选。
安装
bash
pip install conan
conan --version
# 初始化默认配置
conan profile detect --force基本使用
yaml
# conanfile.txt(简单项目)
[requires]
fmt/10.2.1
spdlog/1.13.0
nlohmann_json/3.11.3
cli11/2.4.1
gtest/1.14.0
[generators]
CMakeDeps
CMakeToolchain
[layout]
cmake_layoutbash
# 安装依赖
mkdir build && cd build
conan install .. --output-folder=. --build=missing
# 配置 CMake(使用 Conan 工具链)
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build .conanfile.py(高级配置)
python
# conanfile.py
from conan import ConanFile
from conan.tools.cmake import CMake, cmake_layout
class MyProject(ConanFile):
name = "myproject"
version = "1.0.0"
settings = "os", "compiler", "build_type", "arch"
generators = "CMakeDeps", "CMakeToolchain"
def requirements(self):
self.requires("fmt/10.2.1")
self.requires("spdlog/1.13.0")
self.requires("nlohmann_json/3.11.3")
# 仅测试依赖
self.test_requires("gtest/1.14.0")
def build_requirements(self):
self.tool_requires("cmake/3.28.0")
def layout(self):
cmake_layout(self)
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def package(self):
cmake = CMake(self)
cmake.install()CMake 集成
cmake
# CMakeLists.txt
cmake_minimum_required(VERSION 3.25)
project(MyProject)
find_package(fmt REQUIRED)
find_package(spdlog REQUIRED)
find_package(nlohmann_json REQUIRED)
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE
fmt::fmt
spdlog::spdlog
nlohmann_json::nlohmann_json
)二进制缓存
bash
# 上传到 Conan Center 或私有服务器
conan remote add myserver https://my-conan-server.com/artifactory/api/conan/conan-local
# 上传包
conan upload fmt/10.2.1 --remote myserver
# 从缓存安装(不重新编译)
conan install .. --build=never多配置管理
bash
# Debug 配置
conan install .. -s build_type=Debug --output-folder=build/debug
# Release 配置
conan install .. -s build_type=Release --output-folder=build/release
# 交叉编译(ARM)
conan install .. -pr:b default -pr:h arm_profile关键认知
Conan 的核心优势是二进制缓存,团队成员共享编译好的二进制包,避免重复编译。conanfile.py 比 conanfile.txt 更灵活,支持条件依赖和自定义构建逻辑。大型项目搭建私有 Conan 服务器(Artifactory)显著提升 CI 速度。