Visual Studio工具 vcpkg簡介

博客參考: http://www.javashuo.com/article/p-aqtbmsbu-ho.html && http://www.javashuo.com/article/p-aqtbmsbu-ho.htmllinux

vcpkg是命令行包管理工具,在使用第三方庫的c或c++開發中能夠簡化相關的配置操做。vcpkg安裝的包支持Visual Studio 2015 update 3及以上版本,包括vs2017工具集,目前在windows平臺已有超過900多個包,linux平臺超過350個包。在默認狀況下,vcpkg會優先使用vs2017進行編譯。若是未安裝,則使用vs2015編譯和安裝。使用vcpkg對於c或c++開發,使人煩惱的第三方包管理工做大大的減輕,實則是「居家旅行,必備之品」。android

vcpkg支持衆多架構,有arm-uwp, arm-windows, arm64-uwp, arm64-windows, x64-linux, x64-osx, x64-uwp, x64-windows, x64-windows-static, x86-uwp, x86-windows, x86-windows-staticc++

這個清單之後隨着版本的迭代還會再增長。vcpkg不只支持x86架構,還支持arm架構。注意:這裏的arm架構特指相似於surface這種運行在arm處理器上的Win10平臺,而並不是咱們傳統意義上的Linux或android的ARM平臺。git

安裝VCPKGgithub

1. 先安裝Git 和 cmake 
2. git clone https://github.com/microsoft/vcpkg
3. 編譯vcpkg: 執行Vcpkg工程目錄下的「bootstrap-vcpkg.bat」命令,便可編譯。編譯好之後會在同級目錄下生成vcpkg.exe文件。編譯期間,腳本會自動下載vswhere組件。

注意點:shell

若是電腦中沒有安裝cmake 和 powershell,vcpkg會自動下載portable版本的cmake和powershell。可是因爲各類緣由,下載的網速很慢,因此建議先自行下載安裝msi版本的cmakehe powershell。最好是下載最新版本的cmake或者到download目錄看一下vcpkg下載的對應版本,以後手動安裝或者把源文件壓縮包放到download文件夾內。json

常見指令bootstrap

//查看Vcpkg支持的開源庫列表
.\vcpkg.exe search

//安裝庫
.\vcpkg.exe install libname

安裝過程分爲以下過程

1.環境初始化
2.下載源代碼(若是已經在cache中,則不下載)
3.校驗文件有效性
4.解壓縮源代碼
5.利用配套工具配置源碼工程,在這裏是使用的是cmake(若是是ffmpeg,則用msys2)
7.編譯源碼。通常會同時編譯Release和Debug版本。
8.把編譯好的文件拷貝到相關目錄中去(通常是installed目錄)

注意點:

若是電腦中沒有安裝cmake,vcpkg會自動下載portable版本的cmake。可是因爲各類緣由,下載的網速很慢,因此建議先自行下載安裝msi版本的cmake。最好是下載最新版本的cmake

//指定編譯某種架構的程序庫
若是不指定安裝的架構,vcpkg默認把開源庫編譯成x86的Windows版本的庫。那vcpkg總共支持多少種架構呢?咱們可使用以下命令便知
.\vcpkg.exe help triplet

arm-uwp
arm-windows
arm64-uwp
arm64-windows
x64-uwp
x64-windows-static
x64-windows
x86-uwp
x86-windows-static
x86-windows

.\vcpkg.exe install libcurl:x64-windows

//移除一個已經安裝(編譯)的開源庫
.\vcpkg.exe remove jsoncpp

這個時候只是移除了默認的x86-winodws版本的文件,若是有其餘平臺的版本須要移除,須要制定相應的triplet。
移除也只是移除了二進制程序庫而已,源碼包和解壓縮的源碼並無刪除

若是想要一鍵移除「過期」的包,執行命令:
.\vcpkg.exe remove --outdated
//列出已經安裝的開源庫
.\vcpkg.exe list

//更新已經安裝的開源庫
通常有兩種更新方式。一個是update指令,能夠顯示能夠升級的開源庫的列表。另外一個是upgrade的指令,會從新編譯全部須要更新的包。

//導出已經安裝的開源庫
有的時候,一個項目組中有不少人,不須要每一個人都參與編譯。一我的編譯好全部開源庫後處處給別人便可。有的時候也是出於備份的目的,也會導出已經安裝的開源庫。導出能夠執行export指令。例如,我要導出jsoncpp庫,那麼執行:
.\vcpkg.exe export jsoncpp --7zip

注意,導出時必須指定導出的包格式。vcpkg支持5種導出包格式,有:
參數	        格式
–raw	        以不打包的目錄格式導出
–nuget	以nuget包形式導出
–ifw	        我也不知道這是啥格式
–zip	        以zip壓縮包形式導出
–7zip	以7z壓縮包形式導出   

通常地,導出包的格式爲:vcpkg-export-<日期>-<時間>
默認狀況下只會導出x86-windows的包,若是要導出全部包,那須要制定相應的triplet。好比,若是同時導出x86和x64版本的jsoncpp,那執行命令
.\vcpkg.exe export jsoncpp jsoncpp:x64-windows --7zip

這個命令等價於:
.\vcpkg.exe export jsoncpp:x86-windows jsoncpp:x64-windows --7zip        
    
/導入備份的開源庫
.\vcpkg.exe import xxx.7z

Vcpkg和Visual Studio的集成

什麼是集成?

上面咱們已經安裝了一些第三方庫,那如何使用呢?常規狀況下,咱們須要設置include目錄、lib目錄等,會有不少工做量。Vcpkg提供了一套機制,能夠全自動的適配目錄,而開發者不須要關心已安裝的庫的目錄在哪裏,也不須要設置。這是Vcpkg的一大優點。windows

集成到全局

「集成到全局」適用於Visual Studio開發環境和msbuild命令行。執行命令:架構

.\vcpkg integrate install

當出現「Applied user-wide integration for this vcpkg root.」字樣的時候,說明已經集成成功。這時候能夠在任意的工程中使用安裝好的第三方庫。

4.3. 移除全局集成

 .\vcpkg integrate remove

4.4. 集成到工程

上面已經能夠集成到全局,爲何還要「集成到工程」呢?由於在大部分狀況下,咱們不但願集成到全局,畢竟有不少第三方庫咱們但願自定義處理一下,或者乾脆不想集成第三方庫。那麼集成到工程是最靈活的處理方式。也是工程級項目推薦的處理方式。「集成到工程」是整個vcpkg中最複雜的一項,它須要利用Visual Studio 中的nuget插件來實現。咱們接下來一步一步來講。

4.4.1. 生成配置

.\vcpkg integrate project

這時候會在「vcpkg_root\scripts\buildsystems」目錄下,生成nuget配置文件.

4.4.2. 基本配置

打開Visual Studio,點擊菜單「工具->NuGet包管理器->程序包管理器設置」,進入設置界面,點擊「程序包源」。

點擊「加號」增長一個源。修改源的名字爲vcpkg。在「源」的選項中點擊右側的」…」選擇vcpkg目錄下的「scripts\buildsystems」目錄,而後點擊右側的「更新按鈕」。

點擊「肯定」,關閉設置對話框。

到此,全局性的設置已經完成,之後沒必要再重複設置了。

4.4.3. 工程配置

用Visual Studio 打開一個工程或解決方案。右鍵點擊須要設置的工程,選擇「管理NuGet程序包」。在右上角的「程序包源」中選擇剛剛設置的「vcpkg」。這樣在「瀏覽」選項卡中就能夠看到「vcpkg.H.Repos.vcpkg」。點擊最右側的「安裝」。這樣就能夠集成到某個工程了。

 

4.5. 集成到CMake

最新的Visual Studio 2015和2017大力支持CMake工程,因此對cmake的支持固然不能少。在cmake中集成只要在cmake文件中加入下面這句話便可。

-DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake」

其中是指vcpkg實際所在目錄。

那若是要安裝編譯某一個架構的開源庫,咱們該怎麼寫呢?咱們只須要在須要安裝的包後面指定相應的triplet便可。例如咱們須要編譯ompl,那麼執行以下命令便可。

.\vcpkg install ompl:x64-windows
.\vcpkg install ompl:x86-windows
.\vcpkg install ompl:x86-windows-static

能夠分別獲得不一樣編譯版本的庫

4.6. 集成靜態庫

Vcpkg默認編譯連接的是動態庫,若是要連接靜態庫,目前尚未簡便的方法。須要作以下操做

用文本方式打開vcxproj工程文件

2.在xml的段裏面增長以下兩句話便可

<VcpkgTriplet>x86-windows-static</VcpkgTriplet>
<VcpkgEnabled>true</VcpkgEnabled>

在CMake中集成靜態庫,須要額外指令

cmake .. -DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x86-windows-static

5. 使用Vcpkg時的注意點

  • Vcpkg僅支持Visual Studio 2015 update 3及以上版本(包括Visual Studio 2017),究其緣由,極可能和c++11的支持度以及集成原理有關係。
  • 目前Vcpkg編譯靜態庫,默認只支持MT模式。
相關文章
相關標籤/搜索