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

C++ 包管理工具概览

C++ 包管理工具概览

C++ 历史上缺乏像Cargo、npm那样的事实标准包管理器,实践中常见专用包管理器CMake 内嵌方案系统包管理构建系统一体方案并存;文中对vcpkg、ConanCMake 生态着墨较多,亦覆盖 xmake、Meson、Bazel 等,便于对照选型。名称上Conan(JFrog 生态)常被口误写成 “canon”。下文按类别归纳主流工具、特点与选型思路,并附生态关系图与 CMake 集成方式选型决策示意;版本与命令以各项目官方文档为准。


目录

  1. 生态中的位置(示意)
  2. 工具总览表
  3. vcpkg、Conan 与 CMake 的常见协作
  4. 最小配置片段(示例)
  5. vcpkg(微软)
  6. Conan
  7. CPM.cmake
  8. Hunter
  9. FetchContent(CMake 内置)
  10. 系统包管理器
  11. Bazel
  12. build2
  13. Spack
  14. xmake
  15. Meson
  16. 选型决策树(示意)
  17. 其他与选型建议
  18. 延伸阅读
  19. 免责声明

生态中的位置(示意)

CMake 侧拉依赖

依赖来源(多选一或组合)

你的工程

提供编译器与系统 -dev

源码

CMakeLists.txt

vcpkg ports

Conan 包 / ConanCenter

apt / brew / dnf

FetchContent / CPM

Hunter

读图要点vcpkg / Conan多在配置 CMake 之前或之中把库装到约定前缀或通过toolchain/generator注入;CPM/FetchContent则在CMake 配置阶段拉源码进构建树。


工具总览表

工具类型核心特点典型场景
vcpkg专用 C++ 包管理微软开源,多为主源码构建,与CMake / MSBuild集成深,支持manifest(vcpkg.json)、二进制缓存Windows/Linux/macOS,希望统一拉依赖的 C++ 项目
Conan专用 C++ 包管理去中心化二进制包强依赖解析,Conan 2 改进图模型与锁文件,可搭私有仓多平台、多编译器、多配置,企业级与 CI 友好
CPM.cmakeCMake 脚本基于FetchContent,单文件引入,CPMAddPackage声明依赖中小型 CMake 项目,尽量少装额外 CLI
HunterCMake 脚本ExternalProject_Add驱动,预配置包多,工具链哈希锁版本已有较重 CMake 工程,希望依赖下载构建自动化
FetchContentCMake 内置3.11+ 拉取源码加入工程,无高级版本/冲突解析少量依赖(如测试框架)
apt/yum/brew…系统级装编译器、CMake、系统-dev包;库版本常偏旧基线环境,或与 vcpkg/Conan互补
Bazel构建 + 依赖大规模monorepo、增量与远程缓存、多语言类 Google 风格超大仓
build2构建 + 包管理类 Cargo 的一体化体验,生态相对小愿意采用整套工具链的团队
Spack领域包管理HPC/科学计算,多版本、多编译器共存超算、科研软件栈
xmake构建 + 包管理Lua DSLxmake.lua,内置xmake-repo,一条工具链覆盖依赖与编译希望少写 CMake、跨平台原型与中小项目
Meson构建系统meson.build+Ninja后端,wrap/subproject拉依赖追求可读配置与较快配置阶段,与 CMake 项目并存时需分工

vcpkg、Conan 与 CMake 的常见协作

方式vcpkgConan
典型集成CMAKE_TOOLCHAIN_FILE指向scripts/buildsystems/vcpkg.cmake;或使用manifest模式在工程根放vcpkg.jsonconan install生成conan_toolchain.cmake/CMakeDeps等,再在cmake-DCMAKE_TOOLCHAIN_FILE=...CMake Presets
版本锁定vcpkg.jsonbuiltin-baselineoverrides(随 vcpkg 版本演进)Conan 2推荐lockfile+profile
二进制复用binary caching(NuGet、文件共享等,见官方文档)同一 profile下命中缓存则少编译
心智模型「port + triplet」决定如何编库「recipe + profile + package_id」决定 ABI 与包身份

最小配置片段(示例)

vcpkg manifest(节选)

{"name":"my-app","version":"1.0.0","dependencies":["fmt","zlib"]}

Conan 2conanfile.txt(节选,仅示意)

[requires] zlib/1.3.1 [generators] CMakeDeps CMakeToolchain

实际generator 名称与布局以 Conan 2 文档为准;配置后仍需在CMakeLists.txtfind_package并与目标链接(与手写路径相比更易维护)。


vcpkg(微软)

项目说明
定位开源 C++ 库管理器,以从 port recipe 构建为主,支持 Windows / Linux / macOS
集成CMake toolchain 文件、Visual Studio、vcpkg.json清单模式,便于团队与 CI 复现
生态官方维护大量 port(量级随时间增长),常见库如 Boost、OpenCV 等
缓存支持二进制缓存(本地/远程),减轻重复编译
优点上手路径清晰,与 MSVC/VS 体验好,清单模式易纳入版本控制
注意首次全量构建耗时;个别 port 版本相对上游发布可能有滞后

Conan

项目说明
定位C/C++ 包管理器(Python 生态安装 CLI),强调按 profile(OS、编译器、ABI、构建类型)管理二进制制品
仓库ConanCenter自建私有库(如与 Artifactory 集成)
Conan 2.x依赖图、锁文件、元数据模型重构,长期推荐新项采用 2.x
优点多配置/多平台下复用二进制,大企业内网分发友好,依赖解析能力强
注意概念多于 vcpkg(profile、recipe、generators),学习曲线更陡

CPM.cmake

项目建议 CMake
机制CMakeLists.txtinclude(CPM)后使用CPMAddPackage,底层多为FetchContent
依赖通常 CMake3.14+,通过 Git 等拉源码构建
缓存常见缓存目录如~/.cache/CMake/CPM,多项目可复用
优点零独立包管理器进程,配置短,适合原型与小团队
注意偏源码构建;超大量依赖时无 Conan 级二进制治理

Hunter

项目说明
机制CMakeExternalProject_Add等在配置/生成阶段拉取并构建依赖
特点预置大量库的「Hunter 化」配方,工具链哈希锁定构建环境
优点侵入 CMake 项目的方式成熟,版本可钉死
注意初次或清理后configure 时间可能很长;入门配置比重于 CPM

FetchContent(CMake 内置)

项目说明
能力FetchContent_Declare/Populate从 Git、URL 等拉取源码并add_subdirectory
优点无第三方包管理器,最轻
注意无通用「依赖图求解」,版本与传递依赖需手写或由 CPM/Hunter 代劳

系统包管理器

项目说明
代表Debian/Ubuntuapt,RHEL/Fedoradnf/yum,Archpacman,macOSHomebrew
用途安装g++、cmake、ninjalibfoo-dev系统库
优点与 OS 集成、签名与策略成熟
注意库版本偏发行版节奏,跨机器复现常与容器或 vcpkg/Conan混用

Bazel

项目说明
定位Google 开源构建与依赖系统,Starlark规则,强hermetic与远程缓存
优点超大仓增量构建、多语言(C++/Java/Go 等)统一
注意对中小型纯 C++ 项目往往过重,与 CMake 生态直连用第三方转换或桥接

build2

项目说明
定位build2工具链 + 内置包管理,理念接近Cargo 式一体体验
优点概念一致、依赖与构建统一
注意社区与第三方库覆盖小于 vcpkg/Conan

Spack

项目说明
定位面向HPC与科学计算,同一库多版本、多编译器、spec组合
优点复杂软件栈与超算环境友好
注意通用业务 C++ 服务端日常开发较少作为首选

xmake

项目说明
定位构建系统 + 包管理一体:xmake.lua描述目标与选项,add_requires等声明依赖,仓库xmake-repo维护大量包配方
与 CMake 关系并行生态:同一组织可「新模块用 xmake、老模块 CMake」并存,但跨工程复用需约定产物(静态/动态库、头路径)或统一一种主构建
优点配置短、中文文档与社区活跃;交叉编译、工具链探测对新手较友好
注意企业内若已深度绑定CMake + Conan/vcpkg,引入 xmake 需评估CI、IDE、代码审查习惯;版本与包 API 以xmake 官方文档为准

Meson

项目说明
定位声明式构建meson.build生成Ninja(等)后端;依赖常通过wrap(WrapDB / 本地 wrap 文件)或subproject()引入子工程
与 CMake 关系常见于GNOME/系统组件与部分 C 库;与纯 CMake 工程无官方「互转」,协作方式多为各编各的再链接,或用cmake subproject等桥接(视场景)
优点语法可读性强;配置阶段通常比「巨型 CMake」轻快;与pkg-config集成成熟
注意第三方 C++ 库示例仍以CMake 为主时,需在 Meson 侧手写dependency()/ 自定义*.pc等;细节见Meson 手册

选型决策树(示意)

新 C++ 项目选依赖方案

必须企业内网二进制分发?

是否坚持零额外 CLI、仅 CMake?

是否以 MSVC/Windows 为主?

优先考虑 Conan + 私有仓

CPM.cmake / FetchContent

vcpkg

vcpkg 或 Conan 均可,看团队习惯


其他与选型建议

其它名称cget(CMake 检索/安装);xmake / Meson见上文专节;conan拼写勿与 “canon” 混淆。

简明选型

诉求倾向
Windows 为主、快速统一依赖vcpkg
多平台二进制复现、企业私有制品Conan
仅 CMake、最少工具CPM.cmakeFetchContent
重型遗留 CMake、自动化 ExternalProject评估Hunter
基线编译器与系统库apt/dnf/brew
超大 monorepo、多语言Bazel
HPC/多版本科学栈Spack
偏好 Lua 式单仓、内置包仓库xmake
强声明式 + Ninja、与 GLib 等栈一致Meson

延伸阅读

同仓库 CMake 与现代 C++ 构建相关文档可对照阅读,例如hnjzsdx_doc/C++/CMake_target_include_directories_compile_definitions_link_libraries详解.mdfind_packagetarget_link_libraries的配合思路)。


免责声明

工具特性与命令随版本变化;生产选型请阅读所用工具(如 vcpkg、Conan、CMake、xmake、Meson 等)的官方文档及许可证要求。


主题:C++ 包管理、vcpkg、Conan、CPM、CMake、xmake、Meson、Bazel、Spack。

http://www.cnnetsun.cn/news/1798013.html

相关文章:

  • 本地知识库搭建流程
  • 嵌入式LED亮度校准:轻量级Gamma查表引擎GAMMA库
  • 京东自动下单神器:告别抢购烦恼的终极指南
  • FigmaCN中文插件:3分钟告别英文界面,设计师效率提升神器
  • rk3568环境配置和推理报错: RKNN_ERR_MALLOC_FAIL(-4) 和 RKNN_ERR_FAIL(-1)
  • 英雄联盟终极美化神器:LeaguePrank 5分钟快速上手指南
  • winutils:攻克Windows平台Hadoop开发环境兼容性难题的完整解决方案
  • 三步搞定Windows远程桌面多用户配置:告别“不支持“困扰
  • Windows热键冲突终极指南:用Hotkey Detective轻松找回被占用的快捷键
  • 3步将闲置电视盒变身高性能服务器:Amlogic-S9xxx-Armbian项目实战指南
  • RMCP多服务管理终极方案:构建企业级AI集成平台
  • 从零开始:如何用dateutil构建企业级时间处理系统的完整指南
  • DownKyi:开源视频下载工具如何帮你高效管理媒体内容库?
  • 7天持续运行:OpenClaw+Qwen3.5-9B压力测试报告
  • Qwen-Image-2512-Pixel-Art-LoRA 从零开始:Node.js调用与Web服务搭建
  • 终极指南:快速修复fzf终端颜色乱码问题的10个有效方法
  • **claude 4.6写小说工具:2025年创作指南**在数字化浪潮席卷全球的今天,内容创作已成为许多人表达自我、实现价值的重要途径。而在众多创作工具中,Claude 4.6以其独特的功能和卓越
  • Qwen3-0.6B-FP8电商运营提效:商品详情页撰写+用户评价分析+客服话术生成
  • Cowabunga Lite终极指南:5步打造个性化iOS界面
  • OpenCore Legacy Patcher完整指南:让老旧Mac重获新生的终极方案
  • deepin安装chrome
  • AIVideo开源AI视频平台入门:支持Python API调用与批量任务提交说明
  • 中文文献管理终极指南:Jasminum插件如何让Zotero更懂中文
  • OpenClaw+gemma-3-12b-it数据清洗方案:Excel自动化处理实战
  • Krita-Vision-Tools核心架构解析:深度理解AI插件实现原理
  • GLM-4.1V-9B-Base部署教程:ss -ltnp查端口+supervisorctl重启故障恢复
  • 无需代码!ResNet18物体识别WebUI体验:上传图片,AI告诉你是什么
  • 3分钟掌握网易云音乐双语歌词下载神器:LrcHelper终极指南
  • 如何突破限制:数字阅读自由的创新解决方案
  • 突破访问限制:内容解锁完全指南