关于使用vcpkg配置cpp项目库时遇到的一些坑
由于项目需要,硬件生产商提供的是C SDK,需要自行编译一个已有的cpp项目接入测试,按照说明文档,其使用CMake和vcpkg管理构建和依赖
初始环境
确保已经安装VS全家桶,打开安装管理器(Visual Studio Installer),点击修改,在单个组件搜索并确保已经安装用于Windows的C++ CMake工具,在这里安装后就不用额外跑去下CMake了

下载并配置vcpkg
参照官网的安装文档,先找到一个准备安装的目录,将https://github.com/Microsoft/vcpkg.git 这个项目clone下来,并执行bootstrap-vcpkg.bat
来下载二进制程序
这个二进制程序可以随意移动到任何地方,或者配置环境变量,但是如果需要复制到其他地方执行,必须配置环境变量VCPKG_ROOT为这个克隆的git仓库位置,同时这个克隆的仓库也不能随意移动,这个二进制程序充其量只是个启动器,实际运行还是需要这个已经克隆下来的仓库文件
执行
git pull
和vcpkg update
可以在日后更新vcpkg
指定目标Triplet
这个非常重要,否则后续如果你直接开始安装库,那么你大概率只会编译x86的库,而无法用于原生x64程序中,也是我费了快一个小时装完库之后发现的坑
这个单词乍一看令人迷惑,其实指的就是编译的目标平台,可以通过vcpkg help triplet
查看可用的平台

如果你不配置,那么大概率会默认跑到x86-windows
上,如果你配置的VS命令行环境是x64没错,甚至会提示你配置正确的Triplet
warning: vcpkg appears to be in a Visual Studio prompt targeting x64 but installing for x86-windows. Consider using --triplet x64-windows or --triplet x64-uwp.
最显著的特征就是看到你在下载库和编译时,使用的是哪个编译平台,所以,需要配置VCPKG_DEFAULT_TRIPLET环境变量,指定默认的编译平台,当然也可以在执行指令时使用--triplet
临时变更
开始安装需要的库
先初始化VS开发环境,如果你配置了系统变量可以略过,VS装好后默认是不会写环境变量的,所以直接打开命令行也找不到cl或CMake,不过VS已经很贴心地提供了集成环境的脚本,只需在开始菜单找到VS文件夹

大部分时候只需要用第三个就够用了,默认会给配置x64环境,底下的就是各种原生环境的单独指定版本,另外,如果你有Windows Terminal,那么VS也会写入Terminal的启动配置中,就能在标签页下拉框里面看到

选那个powershell版本的就行 如果需要安装库,只需执行vcpkg install [库名]
即可,例如vcpkg install fmt
,它会自动下载库的源代码并编译为指定平台,因此上述的正确配置很重要,如果不出意外,vcpkg应该会正确地找到CMake,并使用对应的编译器下载安装,如果你正确配置了x64-windows,应能看到有相关提示
Detecting compiler hash for triplet x64-windows...
后续与其他事项
在安装完成之后,根据文档后续的说明可以添加VS语法提示的支持,并在CMake中指定库的位置,就能使用刚才已经下载的库了 vcpkg会自动检测系统配置的全局代理并使用,可以解决大部分库无法下载的问题,但是也有些库的脚本在处理代理时会出现问题(例如我在下载openssl时遇到了),这个时候只能看脸用直连了