在传统的vcpkg使用方式中,我们往往需要在全局安装库然后再手动关联到项目,这种方式难以保证不同机器上依赖版本一致。vcpkg的清单模式(manifest mode)改用声明式思路,将项目需要的库写在一个vcpkg.json文件里,由工具自动解析并安装,极大提升了C++依赖管理的可维护性。

什么是清单模式
清单模式是指在项目目录中放置一个vcpkg.json清单文件,里面声明项目名、版本以及依赖列表。当执行vcpkg安装或CMake配置时,vcpkg会读取该文件,在项目的本地目录中建立依赖树,而不是修改全局安装的库。
初始化清单文件
可以在项目根目录手动创建vcpkg.json,也可以通过命令行生成。一个最基础的清单如下:
{
"name": "my-cpp-app",
"version": "1.0.0",
"dependencies": [
"fmt",
"spdlog"
]
}
上面的配置声明了项目依赖fmt和spdlog两个库。保存后,在CMake中启用vcpkg工具链即可自动拉取。
结合CMake使用
在CMake项目中,通过指定工具链文件来开启清单模式。典型配置如下:
cmake_minimum_required(VERSION 3.20)
project(my_cpp_app)
# 设置vcpkg工具链,开启清单模式
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake")
find_package(fmt CONFIG REQUIRED)
find_package(spdlog CONFIG REQUIRED)
add_executable(app main.cpp)
target_link_libraries(app PRIVATE fmt::fmt spdlog::spdlog)
此时构建目录中会出现vcpkg_installed文件夹,所有声明的库都会被安装到此处。
指定依赖版本与特性
清单模式支持更精细的控制,例如锁定版本或开启库的特定功能:
{
"name": "my-cpp-app",
"version": "1.0.0",
"dependencies": [
{
"name": "fmt",
"version>=": "10.1.0"
},
{
"name": "spdlog",
"features": [ "fmt-external" ]
}
]
}
通过version>=可以约束最低版本,features字段则启用对应库的扩展选项。
使用triplet管理平台
如果需要编译x64-windows或arm64-linux等目标,可以在清单同级的配置中指定triplet,或在CMake传参:
cmake -B build -S . -DVCPKG_TARGET_TRIPLET=x64-windows
| Triplet | 说明 |
|---|---|
| x64-windows | 64位Windows动态库 |
| x64-linux | 64位Linux |
| arm64-osx | Apple Silicon macOS |
总结
使用vcpkg清单模式,开发者只需维护一个vcpkg.json即可清晰描述C++项目的全部第三方依赖。它与CMake天然集成,支持版本约束、功能开关和跨平台triplet,是现代化C++工程首选的声明式包管理方案。
vcpkgmanifest_modeC++依赖管理声明式包管理CMake修改时间:2026-07-24 19:54:20