vcpkg 完全指南:用 Microsoft 的 C/C++ 包管理器统一管理 Windows、Linux 与 macOS 依赖

发布时间:2026/9/11 14:28:36
vcpkg 完全指南:用 Microsoft 的 C/C++ 包管理器统一管理 Windows、Linux 与 macOS 依赖 vcpkg 完全指南用 Microsoft 的 C/C 包管理器统一管理 Windows、Linux 与 macOS 依赖【免费下载链接】vcpkgC Library Manager for Windows, Linux, and MacOS项目地址: https://gitcode.com/GitHub_Trending/vc/vcpkgvcpkg 是微软与 C 社区共同维护的免费开源 C/C 包管理器覆盖 Windows、macOS 与 Linux 三大平台支持 CMake、MSBuild 及任意构建系统并提供版本控制、二进制缓存、资产缓存等企业级特性。阅读本文后你将掌握 vcpkg 的安装引导、manifest 模式与经典模式两种依赖管理方式、port/triplet 的底层构建机制以及遥测、安全等进阶运维知识。vcpkg 是什么C/C 包管理器的演进vcpkg 最初于 2016 年推出当时的目标是帮助开发者将项目迁移到新版 Visual Studio。如今它已演进为跨平台的 C/C 依赖管理工具核心定位是解决 C/C 开发者独有的痛点——源码分发方式五花八门、构建系统互不兼容、二进制格式难以统一。从本仓库的源码结构可以清晰地看到它的设计主体用 C 编写包管理器的核心逻辑是 C 程序构建引导脚本则是 CMake/Shell 脚本见 scripts 目录这与 README 中「a C tool at heart」的定位一致port 体系ports 目录下是数千个开源库的「配方」port每个 port 定义如何下载、打补丁、配置、编译并安装一个库triplet 体系triplets 目录定义了目标平台组合架构 CRT 链接方式 库链接方式例如 triplets/x64-linux.cmake 与 triplets/x64-windows.cmake版本数据库versions 目录下的 JSON 文件记录每个 port 的完整版本历史用于实现可复现的版本控制。环境准备获取与引导 vcpkgvcpkg 本体不需要「安装」只需克隆仓库后运行引导脚本即可。本仓库根目录提供了两个平台的引导入口Windowsbootstrap-vcpkg.batLinux / macOSbootstrap-vcpkg.sh以 Unix 系为例bootstrap 脚本 scripts/bootstrap.sh 会先向上查找.vcpkg-root标记文件定位仓库根目录再下载预编译的 vcpkg 二进制。脚本支持的参数如下摘自 scripts/bootstrap.sh 的-help输出参数作用-help显示用法帮助-disableMetrics标记该 vcpkg 根目录关闭遥测统计-skipDependencyChecks跳过 vcpkg 前置依赖检查跳过时 vcpkg 可能无法运行-muslLinux 下使用 musl 版本二进制而非 glibc 版本此外脚本还识别-useSystemBinaries、-allowAppleClang、-buildTests等参数但当前版本已明确提示「no longer has any effect; ignored」仅保留兼容性解析。引导完成后即可在终端中使用vcpkg命令。README 建议运行vcpkg help查看所有可用命令的简短说明运行vcpkg help [topic]查看某个主题的详细帮助。快速开始接入你的构建系统README 强调无论使用哪种构建系统vcpkg 都有对应的接入方案CMake通过 CMake 工具链文件集成在CMakeLists.txt中find_package即可使用已安装的库MSBuild通过vcpkg integrate与 Visual Studio / MSBuild 项目集成其他构建系统使用手动集成方式manual integration将 vcpkg 的installed目录直接加入头文件路径与链接路径。编辑器层面vcpkg 支持 Visual Studio、Visual Studio Code、CLion 与 Qt Creator。安装并正常工作后还可以为终端添加命令补全vcpkg integrate相关功能。从工具链与 triplet 看平台适配vcpkg 之所以能无缝接入各构建系统底层依赖两套机制CMake 工具链文件scripts/toolchains 目录下提供linux.cmake、osx.cmake、android.cmake、ios.cmake、mingw.cmake、emscripten.cmake、freebsd.cmake、netbsd.cmake、openbsd.cmake、ohos.cmake等用于把 CMake 项目指向 vcpkg 的安装目录triplet 编译配置每个 triplet 文件通过set()声明目标参数例如 triplets/x64-linux.cmake 定义set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE static) set(VCPKG_CMAKE_SYSTEM_NAME Linux)而 triplets/x64-windows.cmake 则默认动态库链接VCPKG_LIBRARY_LINKAGE dynamic并声明VCPKG_PROVIDED_FORTRAN ON。这解释了为什么同一个 port 在不同平台上会产生不同形态的产物。使用 vcpkgmanifest 模式与经典模式README 给出了两种依赖管理方式这是 vcpkg 最核心的日常操作。Manifest 模式推荐面向项目Manifest 模式把依赖声明与项目代码放在一起实现依赖的可复现管理vcpkg new --application vcpkg add port fmtvcpkg new --application在项目根目录生成vcpkg.json清单文件manifestvcpkg add port fmt把fmt写入清单并解析依赖图。Manifest 的格式可以直接参考仓库中的 port 元数据。以 ports/fmt/vcpkg.json 为例{ name: fmt, version: 12.2.0, port-version: 1, description: {fmt} is an open-source formatting library providing a fast and safe alternative to C stdio and C iostreams., homepage: https://github.com/fmtlib/fmt, license: MIT, dependencies: [ { name: vcpkg-cmake, host: true }, { name: vcpkg-cmake-config, host: true } ] }可见 manifest 不仅声明依赖名与版本还支持port-version同一上游版本下的配方修订号以及带host: true的 host 依赖构建期工具。经典模式命令行直接安装如果不使用 manifest也可以直接通过命令行安装包vcpkg install fmt经典模式面向快速试验场景安装结果直接落到installed/triplet目录。两种模式最终都依赖同一套 port 构建流程。安装后的用法以 fmt 为例安装完成后如何消费库每个 port 通常会附带一个usage文件说明用法。仓库中 ports/fmt/usage 明确给出The package fmt provides CMake targets: find_package(fmt CONFIG REQUIRED) target_link_libraries(main PRIVATE fmt::fmt) # Or use the header-only version find_package(fmt CONFIG REQUIRED) target_link_libraries(main PRIVATE fmt::fmt-header-only)vcpkg 安装后会把此类使用说明复制到installed/triplet/share/port/usage用户随时可以查阅。深入 port一个包是如何构建的要理解 vcpkg 的工作原理读一个典型 port 的构建脚本是最直接的途径。ports/fmt/portfile.cmake 展示了标准构建流程vcpkg_download_distfile(FMT_BACKPORT_4813_PATCH URLS https://github.com/fmtlib/fmt/commit/588b3a0f8f6a8bcf2a959cae882d5b2703e86737.patch?full_index1 FILENAME fmt-backport-4813.patch SHA512 afda8fdfcdcb4b0dd5df4d4dae96a57a85fb9c4b65d0b49d51258f0913d4aed93ed146ebf96ed7b277490b1dde6c7117f43332013071441a96c3147520de8368 ) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO fmtlib/fmt REF ${VERSION} SHA512 5ac2ba0f54a484999ed5407d82b77aad170cea49a267decd2c0eedadf3b14413e2a83fcc8e9ca9c16640595e019b8636e160f72314d8be50653324e82ac745eb HEAD_REF master PATCHES ${FMT_BACKPORT_4813_PATCH} ) vcpkg_cmake_configure( SOURCE_PATH ${SOURCE_PATH} OPTIONS -DFMT_CMAKE_DIRshare/fmt -DFMT_TESTOFF -DFMT_DOCOFF ) vcpkg_cmake_install() vcpkg_cmake_config_fixup() vcpkg_fixup_pkgconfig() vcpkg_copy_pdbs() file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) vcpkg_install_copyright(FILE_LIST ${SOURCE_PATH}/LICENSE)关键步骤对应关系步骤函数说明下载补丁vcpkg_download_distfile下载额外补丁文件并校验 SHA512获取源码vcpkg_from_github从 GitHub 拉取指定 REF 的源码校验 SHA512 并应用补丁配置vcpkg_cmake_configure以 CMake 配置项目可传OPTIONS如关闭测试与文档构建构建安装vcpkg_cmake_install构建并安装到 packages 目录导出 CMake 配置vcpkg_cmake_config_fixup修正find_package所需的 CMake config 文件导出 pkg-configvcpkg_fixup_pkgconfig生成.pc文件供 pkg-config 类构建系统使用版权文件vcpkg_install_copyright把上游 LICENSE 安装到share/port/copyright这也印证了 README 中 License 一节的说明port 提供的库遵循各自原作者的许可vcpkg 会把相应许可证安装到installed/triplet/share/port/copyright。版本控制与可复现性每个 port 的版本历史记录在 versions 目录。以 versions/f-/fmt.json 为例它按时间倒序记录了 fmt 从 3.0.0 到 12.2.0 的全部版本及对应的git-tree哈希。版本控制特性正是依赖这套版本数据库实现项目 manifest 可锁定精确版本配合vcpkg的 versioning 能力保证不同时间、不同机器上构建出完全一致的依赖集。关键特性面向真实工程场景的能力README 归纳了 vcpkg 的五大核心特性每一项都对应一个真实的工程痛点构建系统集成build system integration通过工具链文件、MSBuild 集成或手动集成三种方式让 CMake/MSBuild/其他系统直接消费 vcpkg 安装的库依赖版本控制versioning基于 versions 版本数据库锁定精确版本参见上文 fmt 示例发布自有包registriesvcpkg 支持 registry注册表概念既可以消费官方 port也可以把团队自有的包发布到私有 registry配合 manifest 使用二进制缓存binary caching复用已构建的二进制产物避免重复编译——同一份依赖在 CI 与本地之间共享构建结果资产缓存asset caching缓存下载的源码归档与工具支持离线场景详见下文「安全与离线」一节。安全、离线场景与遥测安全与防火墙环境README 的 Security 一节指出大多数 port 使用上游开发者偏好的原始构建系统构建库并从官方发布位置下载源码与构建工具。因此在防火墙后使用 vcpkg 时具体需要放行的访问取决于安装哪些 port。对于「air gapped」完全隔离环境官方推荐的策略是先在非隔离环境安装一次把下载的资产填充到与隔离环境共享的资产缓存中再在隔离环境中消费该缓存。这与上面「资产缓存」特性形成闭环。遥测与隐私vcpkg 会收集匿名的使用数据用于改进体验README 提供了三种关闭方式本仓库源码均可验证引导脚本参数运行 bootstrap 脚本时加-disableMetrics见 scripts/bootstrap.sh 的-disableMetrics解析逻辑命令行参数使用 vcpkg 时追加--disable-metrics环境变量设置VCPKG_DISABLE_METRICS环境变量。贡献与生态资源vcpkg 是开放源代码项目README 欢迎通过两种途径参与提交 issue当需要某个库而 vcpkg registry 中没有时可以在仓库提交 issue提交 PR提交修复或新包。官方还提供了打包教程与维护者指南帮助贡献者理解 port 的编写规范如 ports/fmt/portfile.cmake 所展示的规范流程。项目采用 MIT 许可证见 LICENSE.txt并遵循微软开源行为准则。本仓库本身即是完整的 vcpkg ports 集包含 ports 下数千个库配方、scripts 下的构建辅助脚本、triplets 下的平台定义以及 versions 下的版本数据库是学习 C/C 包管理工程化实践的绝佳参考。小结从 2016 年帮助迁移 Visual Studio到如今跨平台、支持任意构建系统的成熟包管理器vcpkg 始终围绕 C/C 生态的独有痛点演进。核心工作流可以概括为三步引导安装 → 声明依赖manifest 或经典模式→ 集成构建系统消费库。在此基础上版本控制、二进制缓存、资产缓存与注册表机制让它足以支撑从个人项目到企业级 CI/CD 的完整链路。【免费下载链接】vcpkgC Library Manager for Windows, Linux, and MacOS项目地址: https://gitcode.com/GitHub_Trending/vc/vcpkg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询