vcpkg 是微軟 C++ 團隊開發的在 Windows 上運行的 C/C++ 項目包管理工具,能夠幫助您在 Windows 平臺上獲取 C 和 C++ 庫.php
vcpkg 自身也是使用 C++ 開發的 (而其餘的 C++ 包管理大多並非 C++ 開發的),而且 vcpkg 可以幫助用戶在 Visual Studio 中,更好的使用這些安裝好的庫.nginx
vcpkg 整合了 git,構建系統整合的 CMake,而絕大多數的 C++ 項目均可以直接或者間接的方式使用 CMake建立原生項目文件並構建.git
vcpkg遵循一下原則:github
開放源碼sql
無需安裝shell
支持重發構建bootstrap
自定義生成vim
社區參與貢獻windows
端口集成(與 BSD Ports 機制相似)api
安裝和自舉:
git clone https://github.com/Microsoft/vcpkg cd vcpkg powershell -exec bypass scripts\bootstrap.ps1
搜索庫:
vcpkg search
安裝庫:
vcpkg install cpprestsdk
查看已安裝的庫:
vcpkg list
將庫集成的 Visual Studio:
vcpkg integrate install
MSDN 介紹博文:
https://blogs.msdn.microsoft.com/vcblog/2016/09/19/vcpkg-a-tool-to-acquire-and-build-c-open-source-libraries-on-windows/
原文:https://github.com/Microsoft/vcpkg/blob/master/README.md#
Vcpkg
概述
Vcpkg能夠幫組你獲取Windows平臺的C和C++庫。這個工具和ecosystem正處於預覽階段。您的參與對vcpkg的成功是很是的重要。
運行vcpkghelp能夠獲取可用命令的簡短描述。
快速教程
要求:
克隆vcpkg庫
C:\src\>git clone https://github.com/Microsoft/vcpkg.git
而後運行
C:\src\>cd vcpkg
C:\src\vcpkg>.\bootstrap-vcpkg.bat
PS D:\vcpkg> .\bootstrap-vcpkg.bat 用於 .NET Framework 的 Microsoft (R) 生成引擎版本 15.4.8.50001 版權全部(C) Microsoft Corporation。保留全部權利。 生成啓動時間爲 2017/12/2 0:10:17。 1>節點 1 上的項目「D:\vcpkg\toolsrc\dirs.proj」(默認目標)。 1>項目「D:\vcpkg\toolsrc\dirs.proj」(1)正在節點 1 上生成「D:\vcpkg\toolsrc\vcpkg\vcpkg.vcxproj」(2) (Clean 個目標)。 2>CoreClean: 正在建立目錄「Release\」。 2>項目「D:\vcpkg\toolsrc\vcpkg\vcpkg.vcxproj」(2)正在節點 1 上生成「D:\vcpkg\toolsrc\vcpkglib\vcpkglib.vcxproj」(3) (Clean 個目標) 。 3>CoreClean: 正在建立目錄「Release\」。 3>已完成生成項目「D:\vcpkg\toolsrc\vcpkglib\vcpkglib.vcxproj」(Clean 個目標)的操做。 2>已完成生成項目「D:\vcpkg\toolsrc\vcpkg\vcpkg.vcxproj」(Clean 個目標)的操做。 1>項目「D:\vcpkg\toolsrc\dirs.proj」(1)正在節點 1 上生成「D:\vcpkg\toolsrc\vcpkgmetricsuploader\vcpkgmetricsuploader.vcxproj」( 4) (Clean 個目標)。 4>CoreClean: 正在建立目錄「Release\」。 4>已完成生成項目「D:\vcpkg\toolsrc\vcpkgmetricsuploader\vcpkgmetricsuploader.vcxproj」(Clean 個目標)的操做。 1>項目「D:\vcpkg\toolsrc\dirs.proj」(1)正在節點 1 上生成「D:\vcpkg\toolsrc\vcpkg\vcpkg.vcxproj」(2:2) (Build 個目標)。 2:2>項目「D:\vcpkg\toolsrc\vcpkg\vcpkg.vcxproj」(2:2)正在節點 1 上生成「D:\vcpkg\toolsrc\vcpkglib\vcpkglib.vcxproj」(3:4) (默認目標)。 3>PrepareForBuild: 正在建立目錄「D:\vcpkg\toolsrc\Release\」。 正在建立目錄「Release\vcpkglib.tlog\」。 InitializeBuildStatus: 正在建立「Release\vcpkglib.tlog\unsuccessfulbuild」,由於已指定「AlwaysCreate」。 ClCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\CL.exe /c /I..\include /Zi /nologo /W3 /WX- /diagnostics:classic /sdl /MP /O2 /Oi /Oy- /GL /D DISABLE_METRICS=0 /D " VCPKG_VERSION=-2017-12-01-34d8c77d35089484f66d80299dc6f8303a994a84" /D _MBCS /D NDEBUG /D _MBCS /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yc"pch.h" /Fp"Release\vcpkglib.pch" /Fo"Release\\" / Fd"Release\vcpkglib.pdb" /Gd /TP /analyze- /errorReport:queue /std:c++latest ..\src\pch.cpp pch.cpp C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\CL.exe /c /I..\include /Zi /nologo /W3 /WX- /diagnostics:classic /sdl /MP /O2 /Oi /Oy- /GL /D DISABLE_METRICS=0 /D " VCPKG_VERSION=-2017-12-01-34d8c77d35089484f66d80299dc6f8303a994a84" /D _MBCS /D NDEBUG /D _MBCS /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Yu"pch.h" /Fp"Release\vcpkglib.pch" /Fo"Release\\" / Fd"Release\vcpkglib.pdb" /Gd /TP /analyze- /errorReport:queue /std:c++latest ..\src\vcpkg\base\checks.cpp ..\s rc\vcpkg\base\chrono.cpp ..\src\vcpkg\base\cofffilereader.cpp ..\src\vcpkg\base\enums.cpp ..\src\vcpkg\base\fi les.cpp ..\src\vcpkg\base\lineinfo.cpp ..\src\vcpkg\base\machinetype.cpp ..\src\vcpkg\base\strings.cpp ..\src\ vcpkg\base\system.cpp ..\src\vcpkg\binaryparagraph.cpp ..\src\vcpkg\build.cpp ..\src\vcpkg\commands.autocomple te.cpp ..\src\vcpkg\commands.buildexternal.cpp ..\src\vcpkg\commands.cache.cpp ..\src\vcpkg\commands.ci.cpp .. \src\vcpkg\commands.contact.cpp ..\src\vcpkg\commands.cpp ..\src\vcpkg\commands.create.cpp ..\src\vcpkg\comman ds.dependinfo.cpp ..\src\vcpkg\commands.edit.cpp ..\src\vcpkg\commands.env.cpp ..\src\vcpkg\commands.exportifw .cpp ..\src\vcpkg\commands.hash.cpp ..\src\vcpkg\commands.import.cpp ..\src\vcpkg\commands.integrate.cpp ..\sr c\vcpkg\commands.list.cpp ..\src\vcpkg\commands.owns.cpp ..\src\vcpkg\commands.portsdiff.cpp ..\src\vcpkg\comm ands.search.cpp ..\src\vcpkg\commands.version.cpp ..\src\vcpkg\dependencies.cpp ..\src\vcpkg\export.cpp ..\src \vcpkg\globalstate.cpp ..\src\vcpkg\help.cpp ..\src\vcpkg\input.cpp ..\src\vcpkg\install.cpp ..\src\vcpkg\metr ics.cpp ..\src\vcpkg\packagespec.cpp ..\src\vcpkg\packagespecparseresult.cpp ..\src\vcpkg\paragraphparseresult .cpp ..\src\vcpkg\paragraphs.cpp ..\src\vcpkg\parse.cpp ..\src\vcpkg\postbuildlint.buildtype.cpp ..\src\vcpkg\ postbuildlint.cpp ..\src\vcpkg\remove.cpp ..\src\vcpkg\sourceparagraph.cpp ..\src\vcpkg\statusparagraph.cpp .. \src\vcpkg\statusparagraphs.cpp ..\src\vcpkg\triplet.cpp ..\src\vcpkg\update.cpp ..\src\vcpkg\vcpkgcmdargument s.cpp ..\src\vcpkg\vcpkglib.cpp ..\src\vcpkg\vcpkgpaths.cpp ..\src\vcpkg\versiont.cpp checks.cpp chrono.cpp cofffilereader.cpp enums.cpp files.cpp lineinfo.cpp machinetype.cpp strings.cpp system.cpp binaryparagraph.cpp build.cpp commands.autocomplete.cpp commands.buildexternal.cpp commands.cache.cpp commands.ci.cpp commands.contact.cpp commands.cpp commands.create.cpp commands.dependinfo.cpp commands.edit.cpp commands.env.cpp commands.exportifw.cpp commands.hash.cpp commands.import.cpp commands.integrate.cpp commands.list.cpp commands.owns.cpp commands.portsdiff.cpp commands.search.cpp commands.version.cpp dependencies.cpp export.cpp globalstate.cpp help.cpp input.cpp install.cpp metrics.cpp packagespec.cpp packagespecparseresult.cpp paragraphparseresult.cpp paragraphs.cpp parse.cpp postbuildlint.buildtype.cpp postbuildlint.cpp remove.cpp sourceparagraph.cpp statusparagraph.cpp statusparagraphs.cpp triplet.cpp update.cpp vcpkgcmdarguments.cpp vcpkglib.cpp vcpkgpaths.cpp versiont.cpp Lib: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\Lib.ex e /OUT:"D:\vcpkg\toolsrc\Release\vcpkglib.lib" /NOLOGO /LTCG Release\pch.obj Release\checks.obj Release\chrono.obj Release\cofffilereader.obj Release\enums.obj Release\files.obj Release\lineinfo.obj Release\machinetype.obj Release\strings.obj Release\system.obj Release\binaryparagraph.obj Release\build.obj Release\commands.autocomplete.obj Release\commands.buildexternal.obj Release\commands.cache.obj Release\commands.ci.obj Release\commands.contact.obj Release\commands.obj Release\commands.create.obj Release\commands.dependinfo.obj Release\commands.edit.obj Release\commands.env.obj Release\commands.exportifw.obj Release\commands.hash.obj Release\commands.import.obj Release\commands.integrate.obj Release\commands.list.obj Release\commands.owns.obj Release\commands.portsdiff.obj Release\commands.search.obj Release\commands.version.obj Release\dependencies.obj Release\export.obj Release\globalstate.obj Release\help.obj Release\input.obj Release\install.obj Release\metrics.obj Release\packagespec.obj Release\packagespecparseresult.obj Release\paragraphparseresult.obj Release\paragraphs.obj Release\parse.obj Release\postbuildlint.buildtype.obj Release\postbuildlint.obj Release\remove.obj Release\sourceparagraph.obj Release\statusparagraph.obj Release\statusparagraphs.obj Release\triplet.obj Release\update.obj Release\vcpkgcmdarguments.obj Release\vcpkglib.obj Release\vcpkgpaths.obj Release\versiont.obj vcpkglib.vcxproj -> D:\vcpkg\toolsrc\Release\vcpkglib.lib FinalizeBuildStatus: 正在刪除文件「Release\vcpkglib.tlog\unsuccessfulbuild」。 正在對「Release\vcpkglib.tlog\vcpkglib.lastbuildstate」執行 Touch 任務。 3>已完成生成項目「D:\vcpkg\toolsrc\vcpkglib\vcpkglib.vcxproj」(默認目標)的操做。 2>PrepareForBuild: 正在建立目錄「Release\vcpkg.tlog\」。 InitializeBuildStatus: 正在建立「Release\vcpkg.tlog\unsuccessfulbuild」,由於已指定「AlwaysCreate」。 ClCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\CL.exe /c /I..\include /Zi /nologo /W3 /WX- /diagnostics:classic /sdl /MP /O2 /Oi /Oy- /GL /D _MBCS /D NDEBUG /D _MB CS /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Release\\" /Fd"Release\vc141.pdb " /Gd /TP /analyze- /errorReport:queue /std:c++latest ..\src\vcpkg.cpp vcpkg.cpp Link: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\link.e xe /ERRORREPORT:QUEUE /OUT:"D:\vcpkg\toolsrc\Release\vcpkg.exe" /NOLOGO winhttp.lib version.lib kernel32.lib u ser32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32. lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.li b oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /m anifest:embed /DEBUG:FULL /PDB:"D:\vcpkg\toolsrc\Release\vcpkg.pdb" /OPT:REF /OPT:ICF /LTCG:incremental /TLBID :1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:\vcpkg\toolsrc\Release\vcpkg.lib" /MACHINE:X86 /SAFESEH Release\vcpkg.obj D:\vcpkg\toolsrc\Release\vcpkglib.lib 正在生成代碼 All 11899 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. 已完成代碼的生成 vcpkg.vcxproj -> D:\vcpkg\toolsrc\Release\vcpkg.exe FinalizeBuildStatus: 正在刪除文件「Release\vcpkg.tlog\unsuccessfulbuild」。 正在對「Release\vcpkg.tlog\vcpkg.lastbuildstate」執行 Touch 任務。 2>已完成生成項目「D:\vcpkg\toolsrc\vcpkg\vcpkg.vcxproj」(Build 個目標)的操做。 1>項目「D:\vcpkg\toolsrc\dirs.proj」(1)正在節點 1 上生成「D:\vcpkg\toolsrc\vcpkgmetricsuploader\vcpkgmetricsuploader.vcxproj」( 4:2) (Build 個目標)。 4>PrepareForBuild: 正在建立目錄「Release\vcpkgmet.7D6FDEEB.tlog\」。 InitializeBuildStatus: 正在建立「Release\vcpkgmet.7D6FDEEB.tlog\unsuccessfulbuild」,由於已指定「AlwaysCreate」。 ClCompile: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\CL.exe /c /I..\include /Zi /nologo /W3 /WX- /diagnostics:classic /sdl /MP /O2 /Oi /Oy- /GL /D _MBCS /D NDEBUG /D _MB CS /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Release\\" /Fd"Release\vc141.pdb " /Gd /TP /analyze- /errorReport:queue /std:c++latest ..\src\vcpkgmetricsuploader.cpp vcpkgmetricsuploader.cpp Link: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\link.e xe /ERRORREPORT:QUEUE /OUT:"D:\vcpkg\toolsrc\Release\vcpkgmetricsuploader.exe" /NOLOGO winhttp.lib version.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib u uid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell 32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAcc ess='false'" /manifest:embed /DEBUG:FULL /PDB:"D:\vcpkg\toolsrc\Release\vcpkgmetricsuploader.pdb" /OPT:REF /OP T:ICF /LTCG:incremental /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:\vcpkg\toolsrc\Release\vcpkgmetricsuploader .lib" /MACHINE:X86 /SAFESEH Release\vcpkgmetricsuploader.obj D:\vcpkg\toolsrc\Release\vcpkglib.lib 正在生成代碼 All 1535 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. 已完成代碼的生成 vcpkgmetricsuploader.vcxproj -> D:\vcpkg\toolsrc\Release\vcpkgmetricsuploader.exe FinalizeBuildStatus: 正在刪除文件「Release\vcpkgmet.7D6FDEEB.tlog\unsuccessfulbuild」。 正在對「Release\vcpkgmet.7D6FDEEB.tlog\vcpkgmetricsuploader.lastbuildstate」執行 Touch 任務。 4>已完成生成項目「D:\vcpkg\toolsrc\vcpkgmetricsuploader\vcpkgmetricsuploader.vcxproj」(Build 個目標)的操做。 1>已完成生成項目「D:\vcpkg\toolsrc\dirs.proj」(默認目標)的操做。 已成功生成。 0 個警告 0 個錯誤 已用時間 00:00:28.30
而後,運行以下命令使計算機的全部用戶均可以使用vcpkg (備註:須要管理員權限)
C:\src\vcpkg> .\vcpkg integrate install
PS D:\vcpkg> .\vcpkg integrate install Applied user-wide integration for this vcpkg root. All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available. CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake"
使用vcpkg安裝任何的程序包,如:
C:\src\vcpkg> .\vcpkginstall sdl2 curl
最後,在Visual Studio 2015 or Visual Studio 2017建立新的項目或者打開已經存在的項目。你就可使用#include引用頭文件並使用安裝的程序庫。
查詢sqlite對應的名稱
vcpkg.exe search sqlite libodb-sqlite 2.4.0 Sqlite support for the ODB ORM library sqlite3 3.15.0 SQLite is a software library that implements a se... If your library is not listed, please open an issue at: https://github.com/Microsoft/vcpkg/issues
而後安裝sqlite3
vcpkg.exe install sqlite3 -- CURRENT_INSTALLED_DIR=D:/vcpkg/installed/x86-windows -- DOWNLOADS=D:/vcpkg/downloads -- CURRENT_PACKAGES_DIR=D:/vcpkg/packages/sqlite3_x86-windows -- CURRENT_BUILDTREES_DIR=D:/vcpkg/buildtrees/sqlite3 -- CURRENT_PORT_DIR=D:/vcpkg/ports/sqlite3/. -- Downloading https://sqlite.org/2016/sqlite-amalgamation-3150000.zip... -- Downloading https://sqlite.org/2016/sqlite-amalgamation-3150000.zip... OK -- Testing integrity of downloaded file... -- Testing integrity of downloaded file... OK -- Extracting source D:/vcpkg/downloads/sqlite-amalgamation-3150000.zip -- Extracting done -- Configuring x86-windows-rel -- Configuring x86-windows-rel done -- Configuring x86-windows-dbg -- Configuring x86-windows-dbg done -- Build x86-windows-rel -- Build x86-windows-rel done -- Build x86-windows-dbg -- Build x86-windows-dbg done -- Package x86-windows-rel -- Package x86-windows-rel done -- Package x86-windows-dbg -- Package x86-windows-dbg done -- Warning: Could not find a matching pdb file for: D:/vcpkg/packages/sqlite3_x86-windows/bin/sqlite3.dll D:/vcpkg/packages/sqlite3_x86-windows/debug/bin/sqlite3.dll -- Performing post-build validation -- Performing post-build validation done Package sqlite3:x86-windows is installed
確認是否安裝成功
vcpkg.exe list
安裝64位版本
vcpkg.exe install sqlite3:x64-windows
打開Visual Studio 2015 新建工程,main.cpp以下
#include <sqlite3.h> #include <stdio.h> int main(int argc,char** argv) { printf("%s\n",sqlite3_libversion()): return 0; }
編譯運行
是否支持Visual Studio 2010 ?
否,後續我會介紹Vcpkg用到的「知識點」,能夠爲Visual Studio 2010開發相應工具提供借鑑。
是否支持靜態編譯庫
是,例如vcpkg.exe install xxx:x86-windows-static
沒有我須要的庫怎麼辦
本身寫,後續我會介紹如何向Vcpkg新增庫
參考文獻: