vcpkg作用:
C 和 C++ 库的跨平台开源软件包管理器,它大大简化了 Windows、Linux 和 macOS 上第三方库相关的下载和配置操作。
使用流程:
(1)安装7.2版本的powerShell
后面在用powerShell安装vcpkg各种开源库时会报如下错误
使用vcpkg时,PowerShell版本需要比较新,建议安装ps7以上的版本。右键【windows开始】打开Windows PowerShell, 输入 $PSVersionTable可以查看版本,如下图
我现在的版本是5.1,在使用vcpkg时,提示需要使用7.2版本。powershell release下载路径 https://github.com/PowerShell/PowerShell/releases 找到7.2.11下载,下载完全下一步安装,安装成功会自动在环境变量加上。然后可以正常运行powerShell7
(2)首先在某个目录clone vcpkg
选择某个目录利用Git拉取vcpkg代码:
$ git clone git@github.com:microsoft/vcpkg.git
拉取成功后目录内容如下所示:
(3)然后在vcpkg项目里输入下面命令下载vcpkg.exe
$ ./bootstrap-vcpkg.bat
如果外网还是下载失败,可以进入https://github.com/microsoft/vcpkg-tool/releases/download/2024-01-11/vcpkg.exe直接下载vcpkg.exe,然后拷贝到项目下
把vcpkg配置到环境变量(在vcpkg.exe目录用powerShell执行下面语句):
setx VCPKG_ROOT $pwd
(3)使用powershell安装vcpkg的各种库
注意:vcpkg 大量使用 psl 脚本,所以官方强烈推荐使用 PowerShell 而不是 CMD 命令行来执行各种操作。尽管在使用的时候兼容 CMD,但是在编译这一步,请使用 PowerShell,以下所有操作也如此
一些常用命令(git和powerShell都可执行):
先了解vcpkg一些常用的命令:
./vcpkg.exe search 查看vcpkg支持哪些开源库,比如QT,opencv
./vcpkg.exe help triplet 查看vcpkg支持的架构
./vcpkg.exe list 显示已经安装的开源库
./vcpkg.exe export jsoncpp:x64-windows --zip 导出已经安装的开源库
./vcpkg.exe remove jsoncpp:x64-windows 移除一个已经安装(编译)的开源库(只是移除二进制程序库,源码包和解压缩的源码没有删除)
安装开源库遇到的问题:
1、比如安装一个jsoncpp开源库:
./vcpkg.exe install jsoncpp 默认安装x86-windows版本
./vcpkg.exe install jsoncpp:x64-windows 加:x64-windows可安装x64版本
注意:安装开源库之前会先安装一些默认的库
但在安装这些库时容易显示安装失败,如下图:
这时手动拷贝http链接在网上手动下载,比如下载完PowerShell-7.1.0-win-x86.zip需要拷贝到D:\vcpkg\vcpkg\downloads目录下,再次执行之前的安装命令,powerShell会省去下载步骤直接解压。遇到其他库下载失败也可也采用这种方法。
注意:如果是手动下载的包或者文件需要把名字改为->符号后的名字,然后放到downloads文件夹下,powerShell名字为PowerShell-7.2.11-win-x86.zip,nuget名字为dbb8c13d-nuget.exe
在安装opencv过程中显示flatbuffers:x64-windows failed失败,那就手动下载这个包
需要把这个包名字改为google-flatbuffers-v23.5.26.tar.gz然后放到downloads文件夹下。
有些情况可能无法直接在github上下载,如直接打开下面链接显示无效:
原因:
修改办法:
$url = ‘https://github.com/xxx’
$outputFile = ‘opencv_patch.patch’
Invoke-WebRequest -Uri $url -OutFile $outputFile
(4)集成到visual studio
1、vcpkg安装nuget插件
目的是能够让VS项目使用vcpkg安装的库
安装成功后会在vcpkg目录下有vcpkg.D.vcpkg.1.0.0.nupkg文件
2、将vcpkg集成到VS
第一种方法:集成到VS全局,此种情况所有项目都可以使用vcpkg的库(没有试过有没有用)
./vcpkg.exe integrate install 将所安装的包集成到VS
./vcpkg.exe integrate remove 删除与VS的集成
第二种方法:集成到具体工程
集成到工程(VS项目能直接调用第三方库,不需要配置include/lib/dll文件,这是针对非cmake项目的使用),注意:部分库在vs里使用可能有问题,例如没有debug版本,导致编译链接失败,此时需要自己下载源码编译,再添加到项目中。
操作流程:
VS——工具——NuGet包管理器——程序包管理设置——程序包源——设置.nupkg包路径(之前已经把nupkg文件下载到vcpkg目录下)——点击更新——点击确定
对需要使用vcpkg库的工程右键——管理NuGet程序包(程序包源选择自己设置的)——安装.nupkg包
安装成功后项目中有对应vcpkg配置
如果vcpkg安装了jsoncpp库,可以直接使用jsoncpp库:
同时debug目录下也能发现第三方库的dll
结尾:
在cmake项目中使用vcpkg下载的库:
#一个完整的项目只能使用一次vcpkg库的调用,不然会报递归错误#要放在主cmakelist中,不然报递归错误Maximum recursion depth of 100 exceeded
#这个只能放在主cmakelist中
include(“$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake”)
如果涉及到vcpkg.json在线下载依赖库失败就用下面方法:
#在vcpkg.json下载依赖库失败时自动使用vcpkg库中已有的库
list(APPEND CMAKE_PREFIX_PATH “$ENV{VCPKG_ROOT}/installed/x64-windows”)
