此文檔側重於 Windows
1. vcpkg 簡介
1.1 原理
1.2 目錄結構
1.3 優點
2. vcpkg 獲取
2.1 下載
2.2 編譯
3. vcpkg 使用
3.1 查看支持的開源庫列表
3.2 安裝一個開源庫
3.3 移除一個開源庫(已安裝)
3.4 列出已安裝的開源庫
3.5 更新已安裝的開源庫
3.6 導出已安裝的開源庫
3.7 導入已備份的開源庫
3.8 獲取幫助
4. vcpkg 和 visual studio 的集成
1. vcpkg 簡介
vcpkg 是適用於 C/C++ 庫的跨平台命令行包管理器,由 C++ 團隊使用 C++ 開發的。它簡化了 Windows、Linux 和 macOS 上第三方庫的安裝,同時支持開源庫和專有庫。vcpkg 目錄中的庫與 VS2017/VS2019兼容。
1.1 原理
vcpkg 是 github 上提供的開放源代碼項目。vcpkg 存儲庫的克隆或本地副本包含 vcpkg 可執行文件和目錄,這是描述庫及其選項的包的列表 。 每個包都包含一個或多個端口,還包括有關如何從源獲取和生成庫的信息,或為特定目標環境下載二進制版本的信息。 使用 vcpkg 安裝庫時,它會使用包和端口信息在 vcpkg 目錄的子目錄中下載並生成庫的本地副本,供你使用。
對於使用特定編譯器版本的標准化團隊而言,可讓一位成員使用 vcpkg 下載源碼並編譯,導出庫文件或創建一個 NuGet 包。 然后,可以輕松地將它與其他團隊成員共享。
1.2 目錄結構
- buildtrees - 包含從中生成每個庫的源的子文件夾。
- docs - 文檔和示例。
- download - 已下載的工具或源的緩存副本。 運行安裝命令時,vcpkg 會首先搜索此處。
- installed - 包含每個已安裝庫的標頭和庫文件。 與 Visual Studio 集成時,實質上是相當於告知它將此文件夾添加到其搜索路徑。
- packages - 在不同的安裝之間用於暫存的內部文件夾。
- ports - 用於描述每個庫的目錄、版本和下載位置的文件。 如有需要,可添加自己的端口。
- scripts - 由 vcpkg 使用的腳本(CMake、PowerShell)。
- toolsrc - vcpkg 和相關組件的 C++ 源代碼。
- triplets - 包含每個受支持目標平台(如 x86-windows 或 x64-uwp)的設置。
- versions
1.3 優點
- 自動下載開源庫源代碼。
- 源碼包的緩存管理和版本管理,可以升級版本。
- 輕松編譯。
- 依賴關系檢查(比如編譯libcurl,會自動下載zlib、openssl進行編譯)。
- 無縫集成Visual Studio,不需要設置庫文件、頭文件的所在目錄,自動集成。
- Visual Studio全平台支持,不僅支持Debug/Release、x86/x64編譯,還支持UWP、ARM平台的編譯。
2. vcpkg 獲取
2.1 下載
防止遇到路徑問題,存放目錄不包含中文。如:D:\src\vcpkg。啟動 Git Bash 控制台,進入存放目錄,輸入:
> git clone https://github.com/microsoft/vcpkg
注意:git clone速度太慢是因為 github.global.ssl.fastly.net 域名被限制了,我們只需使用 github 的鏡像網站進行訪問,將地址中的 github.com 替換為 github.com.cnpmjs.org,即:
> git clone https://github.com.cnpmjs.org/microsoft/vcpkg
2.2 編譯
命令行執行 vcpkg 工程目錄下的 “bootstrap-vcpkg.bat” 命令,即可編譯。編譯好以后會在同級目錄下生成 vcpkg.exe 文件。
> .\vcpkg\bootstrap-vcpkg.bat
注意:vcpkg 大量使用的 psl 腳本,所以官方強烈推薦使用 PowerShell 而不是 cmd 命令行來執行各種操作。盡管在使用的時候兼容 cmd,但是在編譯這一步,請盡量使用 PowerShell,工具位於 \vcpkg\downloads\tools 路徑下。
3. vcpkg 使用
3.1 查看支持的開源庫列表
> vcpkg search
3.2 安裝一個開源庫
這里的“安裝“其實是指下載和編譯。大致會經歷這幾個過程:
- 環境初始化。
- 下載源代碼(如果已經在cache中,則不下載)。
- 校驗文件有效性。
- 解壓縮源代碼。
- 利用配套工具配置源碼工程,在這里是使用的是cmake。
另外,vcpkg 支持以下多種架構,如不指定默認編譯成 x86 的 Windows 版本庫。
- arm-uwp
- arm-windows
- arm64-uwp
- arm64-windows
- x64-uwp
- x64-windows-static
- x64-windows
- x86-uwp
- x86-windows-static
- x86-windows
比如我們要安裝 x64-windows 版本的 curl 庫:
> vcpkg install curl:x64-windows
注意:這里的arm架構特指類似於surface這種運行在arm處理器上的Win10平台,而並非我們傳統意義上的Linux或android的ARM平台。
3.3 移除一個開源庫(已安裝)
想移除一個已經安裝的開源庫,那么執行 remove 指令即可。比如我們要移除 curl 庫:
> vcpkg remove curl
注意:1. 默認移除 x86-winodws 版本庫,如需移除其他版本庫,需指定。2. 只移除庫本身,源碼包和解壓后的源碼並未移除。
3.4 列出已安裝的開源庫
> vcpkg list
3.5 更新已安裝的開源庫
想要更新已安裝的開源庫,一般有兩個指令:一個是update指令,可以顯示可以升級的開源庫的列表;另一個是upgrade的指令,會重新編譯所有需要更新的包。
3.6 導出已安裝的開源庫
想要導出已安裝的開源庫,那么執行 export 指令即可。比如我們要導出 curl 庫:
> vcpkg export curl --7zip
注意:默認導出 x86-windows 版本庫,如需導出其他版本,需指定。
默認導出 vcpkg 目錄下,默認導出包名稱 vcpkg-export-日期-時間,如需指定目錄和名稱,使用 “-output=” 參數。
導出必須指定包格式:
--raw:以目錄格式導出
--nuget:以 nuget 格式導出
--ifw:未知
--zip:以 zip 格式導出
--7zip:以 7z 格式導出
3.7 導入已備份的開源庫
想要導入已導出的開源庫,那么執行 import 指令即可。
> vcpkg import xxx.7z
3.8 獲取幫助
> vcpkg help export
4. vcpkg 和 Visual Studio 的集成
常規情況下,我們編譯或安裝一些第三方庫后,需要手動設置 include 目錄、lib 目錄、環境變量等,會有很多工作量。vcpkg 提供了一套機制,可以全自動的適配目錄,而開發者不需要關心已安裝的庫的目錄在哪里,也不需要設置。這是vcpkg的一大優勢。
集成指令:
> vcpkg integrate install
移除集成指令:
> vcpkg integrate remove
注意:兼容 Visual Studio 2017/2019 。Visual Studio 2015 未測試。