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

相關文章
相關標籤/搜索