【构建】C++包管理器介绍
文章目录
- C++包管理器介绍
- 一、Vcpkg 介绍
- 1. 概述
- 2. 特点
- 3. 安装与使用
- 4. 在 CMake 中使用(推荐)
- 二、Conan 介绍
- 1. 概述
- 2. 特点
- 3. 安装与使用
- 4. CMake 集成(推荐)
- 三、对比
- 四、使用建议
- Vcpkg 适合场景
- Conan 适合场景
- 五、实践建议
- 建议组合使用方式(推荐)
C++包管理器介绍
在 C++ 项目中,包管理器用于自动下载、构建、配置和集成第三方库,简化依赖管理。目前主流的 C++ 包管理器有两个:Vcpkg 和 Conan。
一、Vcpkg 介绍
1. 概述
- 开发者:微软(Microsoft)
- 初衷:面向 CMake 用户,统一跨平台(Windows/Linux/macOS)的 C++ 库管理
- 使用方式:拉取源码后编译安装到本地缓存目录,再由 CMake 自动集成
2. 特点
- 集成简单(尤其在 Windows/MSVC 上)
- 强调 开箱即用,大多数库都是 静态链接/Release 默认编译
- 支持跨平台、支持 triplet(平台+构建类型)控制构建
- 和 CMake 深度集成(支持
find_package()
)
3. 安装与使用
# 克隆仓库
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg# 构建 vcpkg 工具(Linux/macOS 可使用 ./bootstrap-vcpkg.sh)
./bootstrap-vcpkg.bat # Windows# 安装包
./vcpkg install boost
./vcpkg install fmt:x64-windows-static# 集成 CMake
./vcpkg integrate install
4. 在 CMake 中使用(推荐)
# 示例 CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(MyApp)# 让 vcpkg 的 triplet 生效(推荐使用 toolchain)
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake")find_package(fmt CONFIG REQUIRED)
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE fmt::fmt)
二、Conan 介绍
1. 概述
- 开发者:JFrog
- 定位:通用型二进制包管理器,面向企业级构建、支持 CI/CD 管理
- 更像 Python 的 pip/npm:通过
conanfile.py
或conanfile.txt
定义依赖,下载预构建或自动编译依赖包
2. 特点
- 强大的二进制包缓存/复用机制(支持上传/下载)
- 更可控:自定义构建选项、多配置管理(Release/Debug)
- 跨平台、支持多编译器(GCC/Clang/MSVC)
- 可以与 CMake、Meson 等多种构建系统集成
3. 安装与使用
# 安装 Conan
pip install conan# 创建新工程并添加依赖
mkdir myapp && cd myapp
conan new myapp/1.0 -t# 安装依赖(例如 fmt)
echo -e "[requires]\nfmt/10.1.1\n\n[generators]\nCMakeToolchain\nCMakeDeps" > conanfile.txt
conan install . --output-folder=build --build=missing
4. CMake 集成(推荐)
# 假设 conan 安装在 build 文件夹
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
cmake --build .
# 示例 CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(MyApp)find_package(fmt REQUIRED)
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE fmt::fmt)
三、对比
特性 | Vcpkg | Conan |
---|---|---|
生态系统维护者 | Microsoft | JFrog(开源社区活跃) |
默认支持构建系统 | CMake | 多种(CMake、Meson、Autotools) |
配置/可扩展性 | 一般,偏向默认构建 | 很强,支持自定义配置文件、profile |
包数量与质量 | 约 2k+ 个包 | 1k+,但支持上传私有二进制中心,复用性强 |
Windows 兼容性 | 非常好(MSVC 优先) | 支持所有主流平台(Windows/Linux/macOS) |
多版本并存 | 不支持(每个包一种构建方式) | 支持,同一包可多个配置组合 |
自定义库构建支持 | 较弱 | 强(conanfile.py + build()) |
私有包管理 | 不支持 | 支持,Conan Server / Artifactory |
构建缓存机制 | 弱,统一构建后缓存 | 强,依赖于 hash + profile 的二进制包系统 |
四、使用建议
Vcpkg 适合场景
- Windows 上使用 Visual Studio/MSVC 开发者
- 想快速引入第三方库、偏向 Release + 静态链接
- 简单 CMake 项目依赖管理
Conan 适合场景
- 需要跨平台部署的企业级项目
- CI/CD 构建依赖、缓存复用、大规模组件复用
- 对构建配置和定制要求较高(debug/release, 构建选项等)
- 想上传/下载二进制包,节省重复构建时间
五、实践建议
建议组合使用方式(推荐)
- Vcpkg:用于单机/快速原型开发、Windows 系统
- Conan:用于构建系统、CI/CD 管道、跨平台团队协作