C++ 包管理工具概览

张开发
2026/4/10 9:19:34 15 分钟阅读

分享文章

C++ 包管理工具概览
C 包管理工具概览C 历史上缺乏像Cargo、npm那样的事实标准包管理器实践中常见专用包管理器、CMake 内嵌方案、系统包管理与构建系统一体方案并存文中对vcpkg、Conan与CMake 生态着墨较多亦覆盖 xmake、Meson、Bazel 等便于对照选型。名称上ConanJFrog 生态常被口误写成 “canon”。下文按类别归纳主流工具、特点与选型思路并附生态关系图、与 CMake 集成方式及选型决策示意版本与命令以各项目官方文档为准。目录生态中的位置示意工具总览表vcpkg、Conan 与 CMake 的常见协作最小配置片段示例vcpkg微软ConanCPM.cmakeHunterFetchContentCMake 内置系统包管理器Bazelbuild2SpackxmakeMeson选型决策树示意其他与选型建议延伸阅读免责声明生态中的位置示意CMake 侧拉依赖依赖来源多选一或组合你的工程提供编译器与系统 -dev源码CMakeLists.txtvcpkg portsConan 包 / ConanCenterapt / brew / dnfFetchContent / CPMHunter读图要点vcpkg / Conan多在配置 CMake 之前或之中把库装到约定前缀或通过toolchain/generator注入CPM/FetchContent则在CMake 配置阶段拉源码进构建树。工具总览表工具类型核心特点典型场景vcpkg专用 C 包管理微软开源多为主源码构建与CMake / MSBuild集成深支持manifestvcpkg.json、二进制缓存Windows/Linux/macOS希望统一拉依赖的 C 项目Conan专用 C 包管理去中心化二进制包与强依赖解析Conan 2 改进图模型与锁文件可搭私有仓多平台、多编译器、多配置企业级与 CI 友好CPM.cmakeCMake 脚本基于FetchContent单文件引入CPMAddPackage声明依赖中小型 CMake 项目尽量少装额外 CLIHunterCMake 脚本ExternalProject_Add驱动预配置包多工具链哈希锁版本已有较重 CMake 工程希望依赖下载构建自动化FetchContentCMake 内置3.11 拉取源码加入工程无高级版本/冲突解析少量依赖如测试框架apt/yum/brew…系统级装编译器、CMake、系统-dev包库版本常偏旧基线环境或与 vcpkg/Conan互补Bazel构建 依赖大规模monorepo、增量与远程缓存、多语言类 Google 风格超大仓build2构建 包管理类 Cargo 的一体化体验生态相对小愿意采用整套工具链的团队Spack领域包管理HPC/科学计算多版本、多编译器共存超算、科研软件栈xmake构建 包管理Lua DSL的xmake.lua内置xmake-repo一条工具链覆盖依赖与编译希望少写 CMake、跨平台原型与中小项目Meson构建系统meson.buildNinja后端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.json中builtin-baseline或overrides随 vcpkg 版本演进Conan 2推荐lockfileprofile二进制复用binary cachingNuGet、文件共享等见官方文档同一 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.txt中find_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强调按 profileOS、编译器、ABI、构建类型管理二进制制品仓库ConanCenter与自建私有库如与 Artifactory 集成Conan 2.x依赖图、锁文件、元数据模型重构长期推荐新项采用 2.x优点多配置/多平台下复用二进制大企业内网分发友好依赖解析能力强注意概念多于 vcpkgprofile、recipe、generators学习曲线更陡CPM.cmake项目建议 CMake机制在CMakeLists.txt中include(CPM)后使用CPMAddPackage底层多为FetchContent依赖通常 CMake3.14通过 Git 等拉源码构建缓存常见缓存目录如~/.cache/CMake/CPM多项目可复用优点零独立包管理器进程配置短适合原型与小团队注意偏源码构建超大量依赖时无 Conan 级二进制治理Hunter项目说明机制CMakeExternalProject_Add等在配置/生成阶段拉取并构建依赖特点预置大量库的「Hunter 化」配方工具链哈希锁定构建环境优点侵入 CMake 项目的方式成熟版本可钉死注意初次或清理后configure 时间可能很长入门配置比重于 CPMFetchContentCMake 内置项目说明能力FetchContent_Declare/Populate从 Git、URL 等拉取源码并add_subdirectory优点无第三方包管理器最轻注意无通用「依赖图求解」版本与传递依赖需手写或由 CPM/Hunter 代劳系统包管理器项目说明代表Debian/UbuntuaptRHEL/Fedoradnf/yumArchpacmanmacOSHomebrew等用途安装g、cmake、ninja及libfoo-dev等系统库优点与 OS 集成、签名与策略成熟注意库版本偏发行版节奏跨机器复现常与容器或 vcpkg/Conan混用Bazel项目说明定位Google 开源构建与依赖系统Starlark规则强hermetic与远程缓存优点超大仓增量构建、多语言C/Java/Go 等统一注意对中小型纯 C 项目往往过重与 CMake 生态直连用第三方转换或桥接build2项目说明定位build2工具链 内置包管理理念接近Cargo 式一体体验优点概念一致、依赖与构建统一注意社区与第三方库覆盖小于 vcpkg/ConanSpack项目说明定位面向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等后端依赖常通过wrapWrapDB / 本地 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 / FetchContentvcpkgvcpkg 或 Conan 均可看团队习惯其他与选型建议其它名称cgetCMake 检索/安装xmake / Meson见上文专节conan拼写勿与 “canon” 混淆。简明选型诉求倾向Windows 为主、快速统一依赖vcpkg多平台二进制复现、企业私有制品Conan仅 CMake、最少工具CPM.cmake或FetchContent重型遗留 CMake、自动化 ExternalProject评估Hunter基线编译器与系统库apt/dnf/brew超大 monorepo、多语言BazelHPC/多版本科学栈Spack偏好 Lua 式单仓、内置包仓库xmake强声明式 Ninja、与 GLib 等栈一致Meson延伸阅读同仓库 CMake 与现代 C 构建相关文档可对照阅读例如hnjzsdx_doc/C/CMake_target_include_directories_compile_definitions_link_libraries详解.mdfind_package与target_link_libraries的配合思路。免责声明工具特性与命令随版本变化生产选型请阅读所用工具如 vcpkg、Conan、CMake、xmake、Meson 等的官方文档及许可证要求。主题C 包管理、vcpkg、Conan、CPM、CMake、xmake、Meson、Bazel、Spack。

更多文章