一,介绍
本文将介绍有关vcpkg的安装以及配合Visual Studio的使用,vcpkg是由微软开发的一个C++包管理器,旨在解决C++开发时第三方库复杂的编译以及引用问题。本文将主要介绍使用vcpkg的全局安装功能而不是微软官方文档中的清单(manifest)功能,相比于清单功能,全局安装功能可以做到每个项目即创建即使用,无需为每个新项目单独进行复杂的配置,真正做到一劳永逸。
二,环境要求
确保系统版本为Windows10 高于 1709 (Build 16299) 或Windows11,带有winget工具以及PowerShell。如果在PowerShell中输入winget能够获得如图1所示内容则说明已经安装了winget,PowerShell可以在开始界面找到,也可以使用快捷键Win+X找到。我的PowerShell是黑色的是因为我安装了Windows Terminal,不安装这个也没关系。

图1 winget安装判断
本文使用Visual Studio 2022 Community版本(注:在安装Visual Studio时不要安装Visual Studio可选的vcpkg插件,因为自带的vcpkg插件只能使用清单功能,无法使用全局安装功能)。
三,Git及vcpkg的安装
vcpkg的安装一共只需要输入4行命令即可完成安装。vcpkg通过Git工具进行安装,所以在安装vcpkg之前需要先安装Git,安装方法十分简单。
首先打开PowerShell窗口,在窗口中输入以下命令即可自动安装:
winget install --id Git.Git -e --source winget 窗口中出现Successfully Installed则说明成功安装Git。
由于是从github安装,所以在国内可能会需要换源或魔法上网,具体方式请自行搜索。
安装完Git后需要关闭当前的PowerShell窗口以使得Git的环境变量生效。
随后找到要安装vcpkg的文件夹的上级位置,比如如果要安装vcpkg到H:\盘中的vcpkg文件夹中,则在资源管理器(就是如图3所示那个文件夹图标的东西)中定位到H:\盘。在资源管理器中的空白位置按下Shift+右键,出现如图2所示内容,选择在此处打开PowerShell窗口。如果不在乎安装在哪个盘的话则不需要上面这一步,直接打开PowerShell则会定位到用户文件夹,但是后续安装的第三方库也会在安装vcpkg的文件夹中。

图2 在此处打开PowerShell窗口

图3 资源管理器图标
此时PowerShell中输入命令的地方会变成如图4所示

图4 PowerShell定位到H:\盘
此时输入
git clone https://github.com/microsoft/vcpkg.git 将会在H:\盘中自动创建一个vcpkg文件夹,并下载相关文件。
下载完成后输入
cd vcpkg 即可进入vcpkg文件夹,此时再输入
.\bootstrap-vcpkg.bat 将会下载vcpkg.exe文件到vcpkg文件夹中,到此已经完成了vcpkg的安装。
四,使用vcpkg为Visual Studio安装第三方库
本节将以Eigen库为例介绍如何使用vcpkg查找自已需要的第三方库并进行全局安装,使用vcpkg全局安装一个第三方库只需要2行命令。
在使用vcpkg安装第三方库时首先需要确定我们要安装的第三方库是否被vcpkg收录,以eigen库为例,我们定位到vcpkg文件夹输入以下命令即可进行查询,其他库同理
.\vcpkg search eigen 得到结果如图5所示

图5 查询Eigen库
发现有eigen3库,则说明该库被vcpkg收录。
则接下来我们可以安装该库,通过输入以下内容安装
.\vcpkg install eigen3:x64-windows-static 这里我们安装的是静态库,冒号后面的这部分内容被称为Triplets,描述了要安装的库对应的系统相关情况和是否为静态库,冒号和后面的内容可以缺省,缺省后默认安装的是非静态库,即相当于:x64-windows,有些第三方库如果不以静态库安装则需要依赖相关的DLL文件来运行,如WxWidgets库等,使用静态库可以实现直接编译出的exe文件能够直接在其他电脑上运行,而无需相关的DLL文件。
运行上述命令后如果没有出现红色的字体则一般来说是安装成功了,如果已经安装过这个库则会出现如图6所示内容

图6 已经安装过这个库
然后输入以下内容进行全局安装
.\vcpkg integrate install 出现如图7所示内容则说明成功进行全局安装了

图7 成功全局安装
此时vcpkg会自动为我们进行相关库的引用和链接,我们要做的就是直接#include引入并使用相关的第三方库即可。
我们打开Visual Studio,创建一个新项目,右键项目打开项目属性,可以看到已经多了一个vcpkg选项

图8 vcpkg选项
如果我们要使用静态库还需要对vcpkg进行一个设置,打开上文展示的vcpkg选项卡,找到使用静态库(Use Static Libraries),勾选Yes即可

图9 vcpkg使用静态库
此时直接使用#include,即可直接使用我们安装的库,Visual Studio会进行自动补全

图10 引用安装的第三方库
五,编译过程中可能遇到的问题和解决方法
以下是我在实际使用一些第三方库时遇到的一些问题以及对应的解决方法。注:相关选项卡的中文翻译可能不对,因为我用的是英文系统,我也不知道相关选项的中文是什么。
1.Eigen3
在编译时可能报warning C4819,Unicode相关问题,这个警告可以直接忽略,也可以使用以下方法消除:
项目属性 > C/C++ > 高级(Advanced) > 禁用特殊警告(Disable Specific Warnings) > 输入 4819
2.WxWidgets
在编译时可能报error C4996,使用了不安全的函数,这个属于是Visual Studio的老问题,Visual Studio默认是禁用了如scanf之类的被认为不安全的一些函数,要求使用scanf_s这种修改过的安全函数,可以用如下方法解决:
项目属性 > C/C++ > 预处理器(Preprocessor) > 预处理器定义(Preprocessor Definitions) > 输入 _CRT_SECURE_NO_WARNINGS
链接时可能报LINK2019错误,这可能是由于链接器缺少了一些相关的系统库,可以通过以下方法解决:
项目属性 > 链接器(Linker) > 输入(Input) > 额外依赖(Additional Dependencies) > 添加comctl32.lib 和 Rpcrt4.lib等缺少的库
可能报Invoke main错误,这是由于WxWidgets需要使用Windows的窗口模式,而不是控制台模式,属于是创建项目时的问题,解决方法如下:
项目属性 > 链接器(Linker) > 系统(System) > 子系统(SubSystem) > 改为windows
3.CSerialPort
在编译时可能会报 error LINK2038,运行时库(RuntimeLibrary)相关问题 ,这是由于我们使用的是静态库,而相应的运行时库没有进行对应的更改为静态,依然使用的是DLL模式的运行时库,解决方法如下:
项目属性 > C/C++ > 代码生成(Code Generation) > 运行时库(Runtim Library) > 对Debug模式
选择MTdebug, 对Release模式选择MT
Debug模式和Release模式在项目属性页左上角的配置选项(Configuration)中选择

图11 Debug和Release的选择