文档首页> Linux命令> 蓝易云cdn:在C/C++中使用vcpkg

蓝易云cdn:在C/C++中使用vcpkg

发布时间:2026-02-08 00:02       

下面给你一套在 C/C++ 项目里落地使用 vcpkg 的标准打法:以“可复制、可复用、可在团队内规模化”的工程化方式来做(重点推荐 manifest 模式),避免“机器上能编译、换台电脑就炸”的依赖地狱。🚀
(vcpkg 官方也明确:manifest 模式是多数项目的推荐工作流。)(微软学习)


1) 安装 vcpkg(一次性基建)

Windows(PowerShell / CMD)

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat
​

解释:

  • git clone ...:把 vcpkg 的源码与脚本拉到本地(vcpkg 本质是“工具+端口仓库”)。
  • cd vcpkg:进入工具目录。
  • bootstrap-vcpkg.bat:编译/生成 vcpkg 可执行文件(Windows 用 .bat)。

Linux / macOS

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
​

解释:

  • 同上逻辑,只是类 Unix 用 .sh 引导脚本生成 vcpkg 可执行文件。

工程建议:把 VCPKG_ROOT 作为团队统一环境变量(CI 也一样),避免硬编码路径;CMake 预设也常用它来定位 vcpkg。(微软学习)


2) 在项目里启用 manifest 模式(推荐 ✅)

进入你的项目根目录(有 CMakeLists.txt 的地方):

vcpkg new --application
vcpkg add port fmt
​

解释:

  • vcpkg new --application:生成 vcpkg.json(依赖清单)以及 vcpkg-configuration.json(配置/注册表等),让依赖“项目级”可追踪。(微软学习)
  • vcpkg add port fmt:把 fmt 写进 vcpkg.json 的 dependencies;团队成员拉代码后依赖一致。

此时你项目里会出现类似内容(示例):

{
  "dependencies": ["fmt"]
}
​

解释:

  • 这就是“依赖合同”。提交进仓库后,团队/CI 按合同装依赖,结果可复现。

3) 用 CMake 集成 vcpkg(核心在 toolchain)

最通用的一条命令(适合所有平台)

cmake -S . -B build ^
  -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake
cmake --build build
​

(Linux/macOS 把路径风格改成 $VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake)

解释:

  • cmake -S . -B build:源代码在当前目录,生成产物放到 build。
  • -DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake:关键点:告诉 CMake 在配置阶段加载 vcpkg 工具链,让 find_package() 能自动从 vcpkg 安装结果里找库。(微软学习)
  • cmake --build build:执行构建(底层可能是 Ninja/VS/MSBuild/Make)。

注意:工具链文件要在 首次 configure 时就给到;中途补给容易出现“找不到包/缓存脏”的玄学问题。这也是为什么建议用 CMakePresets 固化。(微软学习)


4) CMakeLists.txt 里怎么用(示例:fmt)

cmake_minimum_required(VERSION 3.15)
project(demo LANGUAGES CXX)

find_package(fmt CONFIG REQUIRED)

add_executable(demo main.cpp)
target_link_libraries(demo PRIVATE fmt::fmt)
​

解释:

  • find_package(fmt CONFIG REQUIRED):走“CONFIG 包模式”,vcpkg 安装的库通常提供这类配置文件,匹配度更高、少踩坑。
  • target_link_libraries(... fmt::fmt):链接目标到导出的 imported target,编译参数/包含目录/链接库由包自己带上,更稳定。

5) Triplet(架构/静动态/平台)怎么控

需要指定目标平台与构建变体时(举例):

vcpkg install --triplet x64-windows
vcpkg install --triplet x64-windows-static
​

解释:

  • --triplet x64-windows:64 位 Windows 动态链接(常见默认)。
  • --triplet x64-windows-static:64 位 Windows 静态链接(体积更大,但部署更“单文件化”)。
  • triplet 还能表达更多变量(架构、CRT、链接方式、交叉编译等),属于“依赖交付规格”。(微软学习)

6) 一句话的“企业级落地建议”📌

  • 新项目:默认 manifest + CMake toolchain,把 vcpkg.json 纳入版本控制,这样团队协作与 CI 才能做到“可复制交付”。(微软学习)
  • 不要把期望押在“全局集成”上当唯一方案(它更像个人机便利功能;团队/CI 一般更需要项目级可复现)。(GitHub)
  • 依赖管理的 KPI 不是“我电脑能跑”,而是“换机器、换人、换 CI 仍然一致能跑”。这才叫工程闭环。😄