vcpkg —— VC++ 打包工具

來源:互聯網
上載者:User

標籤:微軟   mac   export   pat   src   orb   ring   systems   files   

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/vcpkgcd vcpkgpowershell -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 installApplied 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 sqlitelibodb-sqlite        2.4.0            Sqlite support for the ODB ORM librarysqlite3              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 donePackage 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新增庫

 

vcpkg —— VC++ 打包工具

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.