最近在使用vcpkg来更新开源项目的依赖库,中间遇到了不少问题,主要是不能像其它教程所描述的结果顺利更新,下面就将整个过程记录下来作为备忘。
1、首先从https://github.com/microsoft/vcpkg.git克隆源码,如果克隆速度慢,可以使用https://gitee.com/mirrors/vcpkg.git镜像地址,可以克隆在D:\vcpkg下,并检出自己需要的版本,本例使用2020-11版本
2、进入命令行控制台,进入D:\vcpkg, 执行bootstrap-vcpkg.bat,执行完毕后会编译生成vcpkg.exe;
3、如果正常情况下,调用 vcpkg.exe install xxx 即可下载所需的依赖库并编译安装到D:\vcpkg\installed下;
4、如果更新中出现下载失败,一般是被墙了或者网络故障,可以使用代理来解决,通过分析,下载功能一般是调用了cmake的下载模块,cmake又调用了curl库;
5、通过调用分析,curl库的代理设置理论上可以直接设置环境变量(http_proxy,https_proxy)来设置,但是由于vcpkg在调用子命令的时候没有将这2个环境变量传入cmake导致设置了代理也会下载失败;
6、可用通过修改cmake源码的方式来设置代理。
(1)下载对应版本的的cmake,这里我选的是cmake-3.18.4;
(2)用cmake-gui来生成cmake的VC版的工程项目;
(3)在cmFileCommand.cxx文件HandleDownloadCommand()函数,check_curl_result(res, "DOWNLOAD cannot set url: "); 代码后增加2行代码
// config HTTP/HTTPS proxy address
curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:1081");
curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
(4)编译后的文件替换D:\vcpkg\downloads\tools\cmake-3.18.4-windows\cmake-3.18.4-win32-x86\bin下的cmake.exe即可。
7、另外一种方法就是修改vcpkg源码,找到子命令调用位置,将curl代理变量(http_proxy,https_proxy)正确传入子命令,此方法没操作过,需要分析代码所以懒得弄。
8、如果不是英文版,可以运行Visual Studio Installer选择>修改>语言包>英文>修改。
9、通过上面的操作如果还不能正常更新所需的依赖库,就需要看你的VS编译器是有源码编译所需的VS版本, 通过以上操作应该可以正常更新依赖包。如果还不行请百度,也可留言交流。