Conan 包管理工具介绍与使用
文章目录
- Conan 包管理工具介绍与使用
- 什么是 Conan?
- 主要特点
- 安装 Conan
- 基本使用
- 1. 创建新项目
- 2. 编写 conanfile.py
- 3. 添加依赖
- 4. 安装依赖
- 5. 构建项目
- 6. 创建包
- 7. 上传到远程仓库
- 常用命令
- 与构建系统集成
- 与 CMake 集成
- 高级特性
- 实际应用示例
- 总结
Conan 包管理工具介绍与使用
什么是 Conan?
Conan 是一个开源的、跨平台的 C/C++ 包管理器,用于管理 C/C++ 项目的依赖关系。它允许开发者创建、共享和使用二进制包,简化了 C/C++ 项目的依赖管理过程。
主要特点
- 跨平台支持:Windows、Linux、macOS、FreeBSD 等
- 多编译器支持:GCC、Clang、Visual Studio 等
- 二进制包管理:可以预编译依赖项
- 依赖解析:自动处理依赖关系
- 远程仓库:支持公共和私有仓库
- 可配置性:针对不同设置(Debug/Release、架构等)管理不同包
安装 Conan
pip install conan
安装后验证:
conan --version
基本使用
1. 创建新项目
mkdir my_project && cd my_project
conan new hello/0.1 -t
这会创建一个简单的示例项目结构。
2. 编写 conanfile.py
Conan 使用 conanfile.py
或 conanfile.txt
来定义项目依赖。示例 conanfile.py
:
from conans import ConanFileclass HelloConan(ConanFile):name = "hello"version = "0.1"settings = "os", "compiler", "build_type", "arch"generators = "cmake"exports_sources = "src/*"def build(self):cmake = CMake(self)cmake.configure(source_folder="src")cmake.build()def package(self):self.copy("*.h", dst="include", src="src")self.copy("*.lib", dst="lib", keep_path=False)self.copy("*.dll", dst="bin", keep_path=False)self.copy("*.so", dst="lib", keep_path=False)self.copy("*.a", dst="lib", keep_path=False)def package_info(self):self.cpp_info.libs = ["hello"]
3. 添加依赖
在 conanfile.py
中添加 requires
部分:
requires = "zlib/1.2.11", "boost/1.75.0"
或者使用 conanfile.txt
:
[requires]
zlib/1.2.11
boost/1.75.0[generators]
cmake
4. 安装依赖
conan install . -if build -s build_type=Debug --build=missing
-if build
指定安装目录-s build_type=Debug
指定构建类型--build=missing
如果二进制不可用则从源码构建
5. 构建项目
conan build . -if build
6. 创建包
conan create . user/channel
7. 上传到远程仓库
conan upload hello/0.1@user/channel -r=my-remote --all
常用命令
命令 | 描述 |
---|---|
conan search <package> | 搜索包 |
conan install | 安装依赖 |
conan info | 查看依赖信息 |
conan create | 创建并测试包 |
conan upload | 上传包到远程 |
conan remote add <name> <url> | 添加远程仓库 |
conan profile new <name> --detect | 创建新配置文件 |
与构建系统集成
与 CMake 集成
- 在
conanfile.txt
中添加 CMake 生成器:
[generators]
cmake
- 在 CMakeLists.txt 中包含 Conan 生成的配置文件:
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
- 然后可以像往常一样使用 CMake 构建项目。
高级特性
- 选项和默认选项:可以自定义包的构建方式
- 交叉编译:支持为不同平台构建
- 包修订:跟踪包的更改历史
- 锁定文件:确保可重复构建
- 工具链集成:支持多种构建系统
实际应用示例
假设我们要创建一个使用 Boost 和 OpenSSL 的项目:
- 创建
conanfile.txt
:
[requires]
boost/1.75.0
openssl/1.1.1i[generators]
cmake
- 安装依赖:
conan install . -if build
- 在 CMakeLists.txt 中使用这些依赖:
cmake_minimum_required(VERSION 3.10)
project(MyProject)include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()add_executable(my_app main.cpp)
target_link_libraries(my_app ${CONAN_LIBS})
总结
Conan 为 C/C++ 项目提供了现代化的依赖管理解决方案,解决了传统 C/C++ 开发中依赖管理的痛点。通过合理使用 Conan,可以显著提高项目的可维护性和可移植性,简化团队协作和持续集成流程。