很多朋友用Vcpkg安装第三方库的时候基本都会遇到报错的情况,而且大部分都会出现下面这个页面里面的红色报错信息,但是实际上真正错误应该是上面的Cmake Error提示,下面的红色警告只是Vcpkg官方提供给我们的一个最基础的解决方式,而这个解决方式一般都没什么用。
我在用Vpckg安装C++的网络编程库Crow的时候就报错了,我经历过非常多次的这类问题,但基本都解决了,我自己认为解决这类Vcpkg安装问题的基本思路就是三个点。
首先最重要的,也是国内最痛的点,网络问题,因为Vcpkg安装库所需要的包都来自Github,因此下载速度有时候非常不稳定,这就导致Vcpkg安装包的时候总是出错,这点大家可以通过代理服务器或者挂梯子的方式解决,相信能用上Vcpkg的人,至少找梯子或者架梯子的能力还是有的吧,只要挂上了代理服务器,Vcpkg会自动连接上代理服务器,不需要再配置端口号或者代理服务器的监听地址。
第二点就是如Vcpkg官方提供的提示一样,首先进入到vpckg的安装目录下(就是有vcpkg.exe的目录),然后在命令行输入git pull再输入vcpkg update,这点是为了和Vcpkg官方提供的包下载路径进行同步,如果包下载路径更新了而本地的包下载路径没有更新就会出错,但说实话,这点一般没什么用。
第三点就是不要用控制台去执行vpckg指令!一定要用powershell并且要以管理员的身份运行powershell,然后安装第三方库,这也是大部分人安装包失败的原因。
我上面那个报红色错误的窗口就是控制台窗口,结果安装失败了,然后我以管理员的身份运行PowerShell来安装就成功了,这是因为Vcpkg在安装第三方库的时候需要一些电脑文件的访问权限,如果没有访问权限安装也会失败!
比如我们再用vcpkg安装一个C++第三方库Rapidjson,Rapidjson是一个轻量级的C++的json文件解析库,以效率高著称,另外由于博主设置了Vcpkg的系统环境变量,所以可以在任意文件夹下面使用vcpkg指令,不过安装好的库全部都在Vcpkg的默认路径下。
使用控制台安装,不出意外就直接报错了。
以管理员的身份用PowerShell安装直接成功。
来到Vcpkg的默认安装目录下,可以发现crow和rapidjson都安装好了,使用VS2022本身的项目构建工具导入这些头文件和lib目录下的文件就可以直接使用这些库了,这是最方便的一种方式,如果用VS2022导过包的人,基本看到include目录和lib目录就知道要怎么导入了。
我们就用VS2022导入试试吧,首先就是创建一个C++控制台项目就好了,然后导入头文件和链接库文件。
在CPP文件中输入下面的代码。
#include <iostream>
#include <crow.h>
int main() {
crow::SimpleApp app;
CROW_ROUTE(app, "/")
([]() {
return "Hello, World!";
});
app.port(8080).multithreaded().run();
return 0;
}
直接运行代码就可以了,相当方便对吧。
打开浏览器输入localhost:8080就可以看到我们的Hello,world!了,一个简单的C++Web程序就搭建好了。
还有一种比较复杂但非常通用的导入方式,那就是使用Cmake导入,这里就涉及到了Cmake工具的配置问题了,这个点微软官方教程说的非常明白大家可以自行去阅读。vcpkg 文档 | Microsoft Learn
切忌不要直接用控制台!!!
总的来说,作为一个国际级的大公司开发的包管理器,Vcpkg还是相当好用的,至少相比于导入方式乱七八糟的Cmake而言对新手要友好的多,另外还有一个C++的包管理器叫做Conan,个人感觉是比不上Vcpkg的,Conan安装包的时候非常容易出错,而且是各种方面的错误,我自己用起来觉得不太方便,而且Conan是一个小公司开发的,很难比得上Vcpkg这种后台特别硬的管理器,Conan支持导入的包也远少于Vcpkg,不过之后大家基本都要学会用Cmake去导入包了,这点是和其他C++学习者拉开差距的一个分水岭。
尽管Vcpgk可以导入大部分的C++第三方库,但是有些库不建议用Vcpkg来导入,比如Qt、Boost、Wt这类大型库,这些库用Vcpkg安装非常容易出错,这不只是针对Vcpkg而言,基本对于所有的C++包管理器而言都是如此,因为这些库过于庞大了,但是这些库都有自己官方提供的安装方式,而不会依赖于包管理器。