vcpkg 是微软 C++ 团队开发的在 Windows 上运行的 C/C++ 项目包管理工具,能够帮助您在 Windows 平台上获取 C 和 C++ 库.php
vcpkg 自身也是使用 C++ 开发的 (而其余的 C++ 包管理大多并非 C++ 开发的),而且 vcpkg 可以帮助用户在 Visual Studio 中,更好的使用这些安装好的库.nginx
vcpkg 整合了 git,构建系统整合的 CMake,而绝大多数的 C++ 项目均可以直接或者间接的方式使用 CMake建立原生项目文件并构建.c++
vcpkg遵循一下原则:git
开放源码github
无需安装sql
支持重发构建shell
自定义生成bootstrap
社区参与贡献vim
端口集成(与 BSD Ports 机制相似)windows
安装和自举:
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新增库