windows系统如何在C++项目中使用第三方库

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

安装vcpkg

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

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这样的管理器那么优秀。git

安装第三方包

使用vcpkg安装第三方包很是简单,只须要执行vcpkg install 包的名称便可。若是咱们不知道包的具体名称,还可使用vcpkg search 包的名称来进行搜索,好比咱们想实现websocket功能,则能够执行: .\vcpkg.exe search websocketgithub

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进行搜索。web

image.png

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

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

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

若是你仅仅是为了学习,则能够尝试使用 vcpkg install libzip:x64-windows来安装一个较小的包: libzip。若是你的操做系统是32位的,则须要移除 :x64-windows后缀。

安装过程当中的错误,大可能是因为网络缘由形成的。安装的快与慢取决于计算机的CPU编译速度,咱们要作的仅仅是耐心等待。好比安装过程当中停留在哪一个界面,则须要查看vcpkg是否在进行数据下载(查看网络状况),或是进行编译(查看CPU占用状况),若是二者都不是,则须要咱们按下回车来帮助一下它。windows

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

安装成功后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>

若是你使用的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