概述
vcpkg是微軟開發的在Windows, Linux和MacOS平台管理C/C++庫的開源工具。
快速開始
要求
使用vcpkg需滿足如下條件:
- Windows 10, 8.1, 7, Linux, or MacOS
- Visual Studio 2017 or Visual Studio 2015 Update 3 (on Windows)
- Git
- CMake 3.10.2 (optional)
安裝vcpkg
> git clone https://github.com/Microsoft/vcpkg
> cd vcpkg
PS> .\bootstrap-vcpkg.bat
Ubuntu:~/$ ./bootstrap-vcpkg.sh
為了讓計算機的所有用戶都可以使用vcpkg,運行如下命令(首次運行需管理員權限):
PS> .\vcpkg integrate install
Ubuntu:~/$ ./vcpkg integrate install
安裝庫
通過如下命令便可以安裝庫:
PS> .\vcpkg install sdl2 curl
Ubuntu:~/$ ./vcpkg install sdl2 curl
對於Windows
平台,vcpkg
默認安裝32位庫,如果想要設置為默認安裝64位庫,在環境變量中加上VCPKG_DEFAULT_TRIPLET=x64-windows
即可。
如果你在安裝庫時下載速度非常慢甚至下載失敗,可以拷貝下載鏈接自行下載好庫的壓縮包,然后放在downloads
文件夾,這樣vcpkg
便直接使用下載好的庫來編譯安裝。
對於有些庫,默認可能不是所有的依賴都安裝,如ceres-solver,默認不支持suitesparse,cxsparse
,此時可以通過命令.\vcpkg install ceres[suitesparse,cxsparse]:x64-windows --recurse
重新安裝,其中--recurse
表示可以卸載之前的庫。更多install參數可以通過命令.\vcpkg help install
查看。
再比如支持cuda的opencv版本,可以通過命令.\vcpkg install opencv[cuda]:x64-windows
來安裝。
卸載vcpkg
直接刪除vcpkg的文件夾即可。
使用庫
CMake
在CMake中使用通過vcpkg安裝的庫的最佳方式是通過工具鏈文件(toolchain file) scripts/buildsystems/vcpkg.cmake
,讓安裝的庫通過find_package()
被發現。
要使用這個文件,只需通過命令-DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake
將其加入CMake命令行中即可。例如
cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake (Linux/MacOS)
cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake (Windows)
再比如,如果要用VS2017編譯器,輸入下面命令即可:
cmake .. -DCMAKE_TOOLCHAIN_FILE=D:\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 15 2017 Win64"
還有一種方法,直接在CMakeLists.txt
文件中指定CMAKE_TOOLCHAIN_FILE
,即
set(CMAKE_TOOLCHAIN_FILE "D:\vcpkg\scripts\buildsystems\vcpkg.cmake")
project(PROJECT_NAME)
這里需要注意的是,設置CMAKE_TOOLCHAIN_FILE
要在project()
命令之前。另外多說一句,類似CMAKE_TOOLCHAIN_FILE
, CMAKE_SYSTEM_NAME
, CMAKE_C_COMPILER
等這些變量都要在project()
命令之前設定,不然CMake
仍然會按照默認的設置來。
VisualStudio
在VS中,所有已經安裝的庫都被VS項目自動包含(通過前面提到的vcpkg integrate install
命令實現),無需配置便可直接使用。
CLion
在CLion中的配置如下File -> Settings -> Build, Execution, Deployment -> CMake,在CMake Options中添加-DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake
vcpkg命令
vcpkg help
: 幫助vcpkg search
: 搜索庫vcpkg install
: 安裝庫
對於Windows
平台.\vcpkg install openmesh:x86-windows
:安裝32位庫.\vcpkg install openmesh:x64-windows
:安裝64位庫.\vcpkg install openmesh:x64-windows-static
安裝64位靜態庫
vcpkg list
:列出所有已經安裝的庫vcpkg upgrade
:列出所有可以升級的庫,如果需要升級,需額外添加--no-dry-run
命令vcpkg update
vcpkg remove
:移除某個已經安裝的庫,如果需要移除依賴該庫的其他庫,添加--recurse
命令
vcpkg文件夾構成
- buildtrees -- contains subfolders of sources from which each library is built
- docs -- documentation and examples
- downloads -- cached copies of any downloaded tools or sources. vcpkg searches here first when you run the install command
- installed-- Contains the headers and binaries for each installed library. When you integrate with Visual Studio, you are essentially telling it add this folder to its search paths
- packages -- Internal folder for staging between installs
- ports -- Files that describe each library in the catalog, its version, and where to download it. You can add your own ports if needed
- scripts -- Scripts (cmake, powershell) used by vcpkg
- toolsrc -- C++ source code for vcpkg and related components
- triplets -- Contains the settings for each supported target platform (for example, x86-windows or x64-uwp)
更新vcpkg
在vcpkg根目錄下的ports文件夾中可以看到當前版本包含的所有庫,但由於vcpkg項目正在活躍開發中,有時候有些庫在你當前的版本中並沒有加入,這時可以考慮更新vcpkg。首先拉取vcpkg的遠程倉庫,更新本地倉庫:
git fetch origin master:temp // 從遠程的origin倉庫的master分支下載到本地並新建一個分支temp
git diff temp // 比較本地的倉庫和遠程倉庫的區別
git merge temp // 合並temp分支到master分支
git branch -d temp // 如果不想要temp分支了,可以刪除此分支
然后重新編譯生成vcpkg.exe工具
PS> .\bootstrap-vcpkg.bat
Linux:~/$ ./bootstrap-vcpkg.sh
然后可以通過命令.\vcpkg update
.\vcpkg upgrade
更新已經安裝好的庫。再通過install
命令安裝新的庫。