vcpkg —— VC++ 打包工具


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:171>節點 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新增庫

 

參考文獻:

https://blog.csdn.net/cjmqas/article/details/79282847


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM