1

要使用第三方库,首先需要进行安装。在没有vcpkg以前,安装第三方库需要在本地进行编译与链接,而如果我们是新手,则必然会遇到这样或那样难以解决的问题。但有了vcpkg以后就不一样,vcpkg会自动的替我们完成这一切。

安装vcpkg

管理员权限运行powershell,执行进行clone项目、运行批处理文件、运行集成安装命令:

PS C:\Users\panjie\github> git clone https://github.com/microsoft/vcpkg --depth=1
PS C:\Users\panjie\github> cd .\vcpkg\
PS C:\Users\panjie\github\vcpkg> .\bootstrap-vcpkg.bat

稍等一会,待安装成功的提示。
vcpkg应该是vc++ package manager的简称,即vc++包管理器,它的作用同其它的包管理器。但可能是由于c++出现的比较早,所以其包管理器做的没有npm这样的管理器那么优秀。

安装第三方包

使用vcpkg安装第三方包非常简单,只需要执行vcpkg install 包的名称即可。如果我们不知道包的具体名称,还可以使用vcpkg search 包的名称来进行搜索,比如我们想实现websocket功能,则可以执行: .\vcpkg.exe search websocket

PS C:\github\vcpkg> .\vcpkg.exe search websocket
beast                0                HTTP/1 and WebSocket, header-only using Boost.Asio and C++11
brynet               1.11.0           A C++ header only cross platform high performance tcp network library, and sup...
bsio                 1.0.0            networking library, ans support HTTP/WebSocket, based on asio.
cpprestsdk[websockets]                Websockets support
ixwebsocket          11.2.6           Lightweight WebSocket Client and Server + HTTP Client and Server
...
uwebsockets          19.0.0.5         Simple, secure & standards compliant web I/O for the most demanding of applica...
websocketpp          0.8.2#1          Library that implements RFC6455 The WebSocket Protocol

或者也可以打开https://vcpkg.io/en/packages.html进行搜索。

image.png

该页面给出了包的名称,版本号,主要功能描述以及兼容性。点击View Details还会给出安装命令。

比如我们此时在windows系统中安装websocketpp,按点击View Details给出的提示执行:.\vcpkg install websocketpp
image.png

在这里需要特别注意的是: vcpkg默认安装的包是32位即x86-windows,如若我们当前计算机是64位的,则需要在对应的包名后面增加:x64-windows后缀。比如此时我们正确的命令应该是:.\vcpkg install websocketpp:x64-windows

如果你仅仅是为了学习,则可以尝试使用vcpkg install libzip:x64-windows来安装一个较小的包:libzip。如果你的操作系统是32位的,则需要移除:x64-windows后缀。

安装过程中的错误,大多是由于网络原因造成的。安装的快与慢取决于计算机的CPU编译速度,我们要做的仅仅是耐心等待。如果在安装过程中停留在了哪个界面,则需要查看vcpkg是否在进行数据下载(查看网络情况),或是进行编译(查看CPU占用情况),如果两者都不是,则需要我们按下回车来帮助一下它。

vcpkg install依赖于cmake,如若当前计算机中未安装cmakevcpkg将自动下载并安装。我们所需要保证的是当前计算机的网络是畅通的。

安装成功后vcpkg将提示如何在cmake项目中配置当前包:

Elapsed time for package websocketpp::x64-windows: 10.13 s

Total elapsed time: 32.09 min

The package websocketpp:x64-windows provides CMake targets:

    find_package(websocketpp CONFIG REQUIRED)
    target_link_libraries(main PRIVATE websocketpp::websocketpp)

如果我们用的是cmake项目,则仅需要把上述两条命令复制下来,添加到CMakeLists.txt中。

第三方包成功安装并不是最终目的,我们的最终目标是将第三方包加载到我们的项目中。

至于项目有两类:第一类是使用visio studio开发的应用程序,该程序基于MSBuild构建;第二类是使用其它工具开发的基于cmake的应用程序。

Cmake

若要在cmake中使用第三方包,就需要让cmake能够成功找到第三方包。vcpkg使用了一种为cmake添加参数的方法来实现这一功能。
执行vcpkg integrate install后,将得到如下提示信息:

PS C:\Users\panjie\github\vcpkg> .\vcpkg.exe integrate install
...

// 如果在cmkae项目下,添加对应的参数即可
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/Users/panjie/github/vcpkg/scripts/buildsystems/vcpkg.cmake"

比如在存在CMakeLists.txt的路径上执行:cmake -DCMAKE_TOOLCHAIN_FILE=C:/Users/panjie/github/vcpkg/scripts/buildsystems/vcpkg.cmake

同时还可以为IDE添加编译参数,这样IDE在执行编译时便会自动加入上述参数,以Clion为例:

image.png

Visio Studio

若要在Visio Studio使用vcpkg管理的第三方包,就需要让Visio Studio能够成功的找到第三方包。由于vcpkg也是微软自己的东西,所以使用起来也相当方便。只要我们使用的Visio Studio的版本大于2015,便可以使用vcpkg.exe integrate install来将vs与vcpkg结合在一起。

PS C:\Users\panjie\github\vcpkg> .\vcpkg.exe integrate install
Applied user-wide integration for this vcpkg root.
// 所有的MSBuild c++工程可以使用#include来使用任意安装的第三方库了,言外之意在说,我们以后在visio studio中可以直接使用#include的方式来引用第三方库
All MSBuild C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.
...

需要注意的是:如果我们在使用visio studio,则需要保障当前的VS中安装了英文的语言包。否则将得到如下警告信息:

Warning: The following VS instances are excluded because the English language pack is unavailable.
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
Please install the English language pack.
No suitable Visual Studio instances were found

以时则需要为vs安装英文语言包,然后重新执行:vcpkg integrate install

使用

安装包完成后,在项目中使用可以使用如下命令使用第三方包了:

#include <包名/头文件名.h>
或
#include <包名/头文件名.hpp>

比如:

#include <websocketpp/config/asio_no_tls.hpp>

需要注意上述格式为#include <包名/头文件名.后缀>。如果你使用的IDE提示没有找到相关头文件,则可能需要重新启动一下。

但是

正常来讲,上述的操作全部按照官方文档来的,是应该没有问题的。但是就是有但是,有些时候它就是不行。vcpkg安装后并没有使用visio studio自动找到相关的头文件。仍然提示:can not open source file "xxx.h"。

有人说那重新执行下vcpkg.exe integrate install这个集成的命令是不是就解决了?答案是否定的,因为vcpkg.exe integrate install命令的作用是为visio studio添加第三方依赖的功能上增加了一个指向vcpkg的链接,也就是说只要vcpkg安装了新的包,visio studio便会立即更新。

所以如果visio studio没有立即更新,多数是由于我们未安装成功造成的。

判断某个包是否安装成功的标准也很简单,我们打开vcpkg文件夹,找到installed子文件夹,如果当前系统是64位的,则点击x64-windows查看;如果是32位的,则点击x86-windows查看。

如果有对应生成的以第三方名称命名的文件夹,则说明vcpkg安装成功,问题应该现visio studio集成的环节。
image.png

如果没有对应相应的文件夹,则说明安装出现了问题。这个问题大多是由于在安装时忘记添加:x64-windows后缀造成的。

如果我们不上心使用的vs版本小于2015,则可能需要借助NuGet


潘杰
3.1k 声望238 粉丝