如果你经常在Windows下用C++开发,肯定遇到过这样的场景:想用个第三方库,结果发现要自己编译、配置路径、处理依赖关系,折腾半天还可能编译失败。vcpkg就是微软推出的C++包管理工具,它能像Python的pip一样,一条命令搞定库的下载、编译和配置。
我最早接触vcpkg是在2017年,当时为了在VS2017里用OpenCV,手动配置了整整一上午。后来用了vcpkg,只需要vcpkg install opencv,三分钟就搞定了所有环境配置。现在vcpkg已经支持超过4500个开源库,从常用的Boost、Qt到冷门的数学计算库都能一键安装。
在开始前,请确认你的系统满足:
特别提醒:VS2019安装时要勾选"使用C++的桌面开发"工作负载,确保包含英文语言包(否则可能遇到编码问题)。
打开PowerShell(管理员权限),执行以下命令:
bash复制# 克隆仓库(建议放在非系统盘)
cd D:
git clone https://github.com/microsoft/vcpkg
cd vcpkg
# 执行引导脚本
.\bootstrap-vcpkg.bat
如果网络不好导致下载失败,可以:
把vcpkg目录(如D:\vcpkg)添加到系统PATH变量。这样可以在任意位置使用vcpkg命令。
小技巧:如果想默认安装x64版本库,可以新增系统变量
VCPKG_DEFAULT_TRIPLET=x64-windows
查看所有可用库:
bash复制vcpkg search > libraries.txt
安装一个库(以jsoncpp为例):
bash复制# 默认安装x86版本
vcpkg install jsoncpp
# 指定安装x64版本
vcpkg install jsoncpp:x64-windows
列出已安装的库:
bash复制vcpkg list
卸载某个库:
bash复制vcpkg remove jsoncpp
# 完全删除(包括源码)
vcpkg remove --purge jsoncpp
如果遇到下载超时:
对于需要特定编译选项的库,可以使用--feature参数:
bash复制vcpkg install opencv[contrib,ffmpeg]:x64-windows
bash复制vcpkg integrate install
这会自动将所有已安装库的路径添加到VS的全局设置中。打开任意项目都能直接#include头文件。
注意:全局集成可能导致项目间依赖冲突,生产环境慎用
bash复制# 生成配置文件
vcpkg integrate project
然后在VS2019中:
<vcpkg_dir>\scripts\buildsystems在CMakeLists.txt开头添加:
cmake复制set(CMAKE_TOOLCHAIN_FILE
"D:/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
假设我们要创建一个使用jsoncpp和fmt库的控制台项目:
json复制{
"dependencies": [
"jsoncpp",
"fmt"
]
}
cpp复制#include <json/json.h>
#include <fmt/format.h>
// 无需手动配置库路径!
创建triplets文件(如x64-windows-custom.h):
cmake复制set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static) # 强制静态链接
使用时:
bash复制vcpkg install zlib:x64-windows-custom
将已安装库打包:
bash复制# 导出为7z压缩包
vcpkg export jsoncpp fmt --7zip --output=my_libs
# 导出为NuGet包
vcpkg export --nuget all
在vcpkg.json中指定精确版本:
json复制{
"dependencies": [
{
"name": "boost",
"version>=": "1.81.0"
},
{
"name": "opencv",
"version": "4.5.5"
}
]
}
json复制{
"default-registry": { ... },
"binary-caching": true
}
--x-use-aria2参数启用多线程下载:bash复制vcpkg install opencv --x-use-aria2
vcpkg-configuration.json:json复制{
"registries": [
{
"kind": "git",
"repository": "https://mirror.ghproxy.com/https://github.com/microsoft/vcpkg",
"baseline": "a1ec64f"
}
]
}
Q1:安装时报错"Could not find compiler"
Q2:项目找不到头文件
vcpkg integrate remove后重新安装Q3:链接时报LNK2005错误
最后分享一个实用命令,查看库的依赖关系:
bash复制vcpkg depend-info boost