当前位置: 首页 > web >正文

【构建】C++包管理器介绍

文章目录

  • C++包管理器介绍
    • 一、Vcpkg 介绍
      • 1. 概述
      • 2. 特点
      • 3. 安装与使用
      • 4. 在 CMake 中使用(推荐)
    • 二、Conan 介绍
      • 1. 概述
      • 2. 特点
      • 3. 安装与使用
      • 4. CMake 集成(推荐)
    • 三、对比
    • 四、使用建议
      • Vcpkg 适合场景
      • Conan 适合场景
    • 五、实践建议
      • 建议组合使用方式(推荐)

C++包管理器介绍

在 C++ 项目中,包管理器用于自动下载、构建、配置和集成第三方库,简化依赖管理。目前主流的 C++ 包管理器有两个:VcpkgConan


一、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.pyconanfile.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)

三、对比

特性VcpkgConan
生态系统维护者MicrosoftJFrog(开源社区活跃)
默认支持构建系统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 管道、跨平台团队协作
http://www.xdnf.cn/news/14218.html

相关文章:

  • 从0开始学习语言模型--Day01--亲自构筑语言模型的重要性
  • python中的异常处理try-except - else - finally与自定义异常处理
  • R语言文本探索与预处理:入门指南
  • PH热榜 | 2025-06-14
  • C++开源协程库async_simple有栈协程源码分析
  • SQL Server 窗口函数详解:窗口行数控制的原理、关键字与应用场景
  • 计算机网络-自顶向下—第五章数据链路层重点复习笔记
  • Thread的join方法
  • python+django/flask+uniapp宠物中心信息管理系统app
  • Java开发中避免NullPointerException的全面指南
  • 【三维重建】无位姿图像的大场景On-the-fly重建
  • 【Linux】初见,进程概念
  • 创客匠人解析:美团护城河战略对 IP 可持续变现的启示
  • TCP 协议
  • 2025年EAAI SCI1区TOP,贪婪策略粒子群算法GS-IPSO+无人机桥梁巡检覆盖路径规划,深度解析+性能实测
  • 函数式编程 stream流 lambda表达式
  • event.target 详解:理解事件目标对象
  • 学习昇腾开发的第二天--PC机远程登录开发板
  • 大IPD之——华为的管理变革与战略转型之道(三)
  • 05-Linux软件安装与前后端项目部署
  • adoc(asciidoc)转为markdown的方法,把.adoc文件转换为markdown格式
  • PostgreSQL的扩展pg_visibility
  • 【办公类-25-05】20250514 Python模拟UIBOT上传园园通截图(自动最小化界面,时间部分的删除和黏贴)
  • 【CSS-13】CSS 网页布局三大机制详解:普通流、浮动与定位
  • 2.2 订阅话题
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(三)
  • 开源统一数据库管理平台完全指南:私有化部署方案与技术解析
  • 解决Spark4.0.0依赖问题
  • http的缓存问题
  • pytorch 实战二 CNN手写数字识别