vcpkg —— VC++ 打包工具
vcpkg 是微软 C++ 团队开发的在 Windows 上运行的 C/C++ 项目包管理工具,可以帮助您在 Windows 平台上获取 C 和 C++ 库.
vcpkg 自身也是使用 C++ 开发的 (而其他的 C++ 包管理大多并不是 C++ 开发的),并且 vcpkg 能够帮助用户在 Visual Studio 中,更好的使用这些安装好的库.
vcpkg 整合了 git,构建系统整合的 CMake,而绝大多数的 C++ 项目都可以直接或者间接的方式使用 CMake创建原生项目文件并构建.
vcpkg遵循一下原则:
-
开放源码
-
无需安装
-
支持重发构建
-
自定义生成
-
社区参与贡献
-
端口集成(与 BSD Ports 机制类似)
安装和自举:
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可以获取可用命令的简短描述。
快速教程
要求:
- Visual Studio 2015 Update 3 or
- Visual Studio 2017
- CMake 3.8.0 或更高干部 (备注: 如果你机器上没有找到,将会自动安装到你的机器上)
- git.exe 加入到path中
克隆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
安装
查询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;
}
编译运行
FAQ
-
是否支持Visual Studio 2010 ?
否,后续我会介绍Vcpkg用到的“知识点”,可以为Visual Studio 2010开发相应工具提供借鉴。 -
是否支持静态编译库
是,例如vcpkg.exe install xxx:x86-windows-static
-
没有我需要的库怎么办
自己写,后续我会介绍如何向Vcpkg新增库
参考文献: