要使用第三方库,首先需要进行安装。在没有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进行搜索。
该页面给出了包的名称,版本号,主要功能描述以及兼容性。点击View Details
还会给出安装命令。
比如我们此时在windows系统中安装websocketpp
,按点击View Details
给出的提示执行:.\vcpkg install websocketpp
在这里需要特别注意的是: 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
,如若当前计算机中未安装cmake
,vcpkg
将自动下载并安装。我们所需要保证的是当前计算机的网络是畅通的。
安装成功后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为例:
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集成的环节。
如果没有对应相应的文件夹,则说明安装出现了问题。这个问题大多是由于在安装时忘记添加:x64-windows
后缀造成的。
如果我们不上心使用的vs版本小于2015,则可能需要借助NuGet
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。