Visual Studio工具 vcpkg簡介


博客參考: https://blog.csdn.net/cjmqas/article/details/79282847#43-移除全局集成 && https://blog.csdn.net/cjmqas/article/details/79282847

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

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-static

這個清單以后隨着版本的迭代還會再增加。vcpkg不僅支持x86架構,還支持arm架構。注意:這里的arm架構特指類似於surface這種運行在arm處理器上的Win10平台,而並非我們傳統意義上的Linux或android的ARM平台。

安裝VCPKG

1
2
3

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

如果電腦中沒有安裝cmake 和 powershell,vcpkg會自動下載portable版本的cmake和powershell。但是由於各種原因,下載的網速很慢,所以建議先自行下載安裝msi版本的cmakehe powershell。最好是下載最新版本的cmake或者到download目錄看一下vcpkg下載的對應版本,之后手動安裝或者把源文件壓縮包放到download文件夾內。

常見指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//查看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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//列出已經安裝的開源庫
.\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

1
2
/導入備份的開源庫
.\vcpkg.exe import xxx.7z
Vcpkg和Visual Studio的集成
什么是集成?
上面我們已經安裝了一些第三方庫,那如何使用呢?常規情況下,我們需要設置include目錄、lib目錄等,會有很多工作量。Vcpkg提供了一套機制,可以全自動的適配目錄,而開發者不需要關心已安裝的庫的目錄在哪里,也不需要設置。這是Vcpkg的一大優勢。

集成到全局
“集成到全局”適用於Visual Studio開發環境和msbuild命令行。執行命令:

1
.\vcpkg integrate install
當出現“Applied user-wide integration for this vcpkg root.”字樣的時候,說明已經集成成功。這時候可以在任意的工程中使用安裝好的第三方庫。

4.3. 移除全局集成
1
.\vcpkg integrate remove
4.4. 集成到工程
上面已經可以集成到全局,為什么還要“集成到工程”呢?因為在大部分情況下,我們不希望集成到全局,畢竟有很多第三方庫我們希望自定義處理一下,或者干脆不想集成第三方庫。那么集成到工程是最靈活的處理方式。也是工程級項目推薦的處理方式。“集成到工程”是整個vcpkg中最復雜的一項,它需要利用Visual Studio 中的nuget插件來實現。我們接下來一步一步來說。

4.4.1. 生成配置
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文件中加入下面這句話即可。

1
-DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake”
其中是指vcpkg實際所在目錄。

那如果要安裝編譯某一個架構的開源庫,我們該怎么寫呢?我們只需要在需要安裝的包后面指定相應的triplet即可。例如我們需要編譯ompl,那么執行如下命令即可。

1
2
3
.\vcpkg install ompl:x64-windows
.\vcpkg install ompl:x86-windows
.\vcpkg install ompl:x86-windows-static
可以分別得到不同編譯版本的庫

4.6. 集成靜態庫
Vcpkg默認編譯鏈接的是動態庫,如果要鏈接靜態庫,目前還沒有簡便的方法。需要做如下操作

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

2.在xml的段里面增加如下兩句話即可

1
2
x86-windows-static
true
在CMake中集成靜態庫,需要額外指令

1
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模式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM