蓝易云cdn:在C/C++中使用vcpkg
下面给你一套在 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、链接方式、交叉编译等),属于“依赖交付规格”。(微软学习)