• 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 scriptsootstrap.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:srcvcpkg>.ootstrap-vcpkg.bat

    PS D:vcpkg> .ootstrap-vcpkg.bat
    用于 .NET Framework 的 Microsoft (R) 生成引擎版本 15.4.8.50001
    版权所有(C) Microsoft Corporation。保留所有权利。
    
    生成启动时间为 2017/12/2 0:10:17。
         1>节点 1 上的项目“D:vcpkg	oolsrcdirs.proj”(默认目标)。
         1>项目“D:vcpkg	oolsrcdirs.proj”(1)正在节点 1 上生成“D:vcpkg	oolsrcvcpkgvcpkg.vcxproj”(2) (Clean 个目标)。
         2>CoreClean:
             正在创建目录“Release”。
         2>项目“D:vcpkg	oolsrcvcpkgvcpkg.vcxproj”(2)正在节点 1 上生成“D:vcpkg	oolsrcvcpkglibvcpkglib.vcxproj”(3) (Clean 个目标)
           。
         3>CoreClean:
             正在创建目录“Release”。
         3>已完成生成项目“D:vcpkg	oolsrcvcpkglibvcpkglib.vcxproj”(Clean 个目标)的操作。
         2>已完成生成项目“D:vcpkg	oolsrcvcpkgvcpkg.vcxproj”(Clean 个目标)的操作。
         1>项目“D:vcpkg	oolsrcdirs.proj”(1)正在节点 1 上生成“D:vcpkg	oolsrcvcpkgmetricsuploadervcpkgmetricsuploader.vcxproj”(
           4) (Clean 个目标)。
         4>CoreClean:
             正在创建目录“Release”。
         4>已完成生成项目“D:vcpkg	oolsrcvcpkgmetricsuploadervcpkgmetricsuploader.vcxproj”(Clean 个目标)的操作。
         1>项目“D:vcpkg	oolsrcdirs.proj”(1)正在节点 1 上生成“D:vcpkg	oolsrcvcpkgvcpkg.vcxproj”(2:2) (Build 个目标)。
       2:2>项目“D:vcpkg	oolsrcvcpkgvcpkg.vcxproj”(2:2)正在节点 1 上生成“D:vcpkg	oolsrcvcpkglibvcpkglib.vcxproj”(3:4) (默认目标)。
         3>PrepareForBuild:
             正在创建目录“D:vcpkg	oolsrcRelease”。
             正在创建目录“Releasevcpkglib.tlog”。
           InitializeBuildStatus:
             正在创建“Releasevcpkglib.tlogunsuccessfulbuild”,因为已指定“AlwaysCreate”。
           ClCompile:
             C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503inHostX86x86CL.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"Releasevcpkglib.pch" /Fo"Release\" /
             Fd"Releasevcpkglib.pdb" /Gd /TP /analyze- /errorReport:queue /std:c++latest ..srcpch.cpp
             pch.cpp
             C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503inHostX86x86CL.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"Releasevcpkglib.pch" /Fo"Release\" /
             Fd"Releasevcpkglib.pdb" /Gd /TP /analyze- /errorReport:queue /std:c++latest ..srcvcpkgasechecks.cpp ..s
             rcvcpkgasechrono.cpp ..srcvcpkgasecofffilereader.cpp ..srcvcpkgaseenums.cpp ..srcvcpkgasefi
             les.cpp ..srcvcpkgaselineinfo.cpp ..srcvcpkgasemachinetype.cpp ..srcvcpkgasestrings.cpp ..src
             vcpkgasesystem.cpp ..srcvcpkginaryparagraph.cpp ..srcvcpkguild.cpp ..srcvcpkgcommands.autocomple
             te.cpp ..srcvcpkgcommands.buildexternal.cpp ..srcvcpkgcommands.cache.cpp ..srcvcpkgcommands.ci.cpp ..
             srcvcpkgcommands.contact.cpp ..srcvcpkgcommands.cpp ..srcvcpkgcommands.create.cpp ..srcvcpkgcomman
             ds.dependinfo.cpp ..srcvcpkgcommands.edit.cpp ..srcvcpkgcommands.env.cpp ..srcvcpkgcommands.exportifw
             .cpp ..srcvcpkgcommands.hash.cpp ..srcvcpkgcommands.import.cpp ..srcvcpkgcommands.integrate.cpp ..sr
             cvcpkgcommands.list.cpp ..srcvcpkgcommands.owns.cpp ..srcvcpkgcommands.portsdiff.cpp ..srcvcpkgcomm
             ands.search.cpp ..srcvcpkgcommands.version.cpp ..srcvcpkgdependencies.cpp ..srcvcpkgexport.cpp ..src
             vcpkgglobalstate.cpp ..srcvcpkghelp.cpp ..srcvcpkginput.cpp ..srcvcpkginstall.cpp ..srcvcpkgmetr
             ics.cpp ..srcvcpkgpackagespec.cpp ..srcvcpkgpackagespecparseresult.cpp ..srcvcpkgparagraphparseresult
             .cpp ..srcvcpkgparagraphs.cpp ..srcvcpkgparse.cpp ..srcvcpkgpostbuildlint.buildtype.cpp ..srcvcpkg
             postbuildlint.cpp ..srcvcpkg
    emove.cpp ..srcvcpkgsourceparagraph.cpp ..srcvcpkgstatusparagraph.cpp ..
             srcvcpkgstatusparagraphs.cpp ..srcvcpkg	riplet.cpp ..srcvcpkgupdate.cpp ..srcvcpkgvcpkgcmdargument
             s.cpp ..srcvcpkgvcpkglib.cpp ..srcvcpkgvcpkgpaths.cpp ..srcvcpkgversiont.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 Studio2017CommunityVCToolsMSVC14.11.25503inHostX86x86Lib.ex
             e /OUT:"D:vcpkg	oolsrcReleasevcpkglib.lib" /NOLOGO /LTCG Releasepch.obj
             Releasechecks.obj
             Releasechrono.obj
             Releasecofffilereader.obj
             Releaseenums.obj
             Releasefiles.obj
             Releaselineinfo.obj
             Releasemachinetype.obj
             Releasestrings.obj
             Releasesystem.obj
             Releaseinaryparagraph.obj
             Releaseuild.obj
             Releasecommands.autocomplete.obj
             Releasecommands.buildexternal.obj
             Releasecommands.cache.obj
             Releasecommands.ci.obj
             Releasecommands.contact.obj
             Releasecommands.obj
             Releasecommands.create.obj
             Releasecommands.dependinfo.obj
             Releasecommands.edit.obj
             Releasecommands.env.obj
             Releasecommands.exportifw.obj
             Releasecommands.hash.obj
             Releasecommands.import.obj
             Releasecommands.integrate.obj
             Releasecommands.list.obj
             Releasecommands.owns.obj
             Releasecommands.portsdiff.obj
             Releasecommands.search.obj
             Releasecommands.version.obj
             Releasedependencies.obj
             Releaseexport.obj
             Releaseglobalstate.obj
             Releasehelp.obj
             Releaseinput.obj
             Releaseinstall.obj
             Releasemetrics.obj
             Releasepackagespec.obj
             Releasepackagespecparseresult.obj
             Releaseparagraphparseresult.obj
             Releaseparagraphs.obj
             Releaseparse.obj
             Releasepostbuildlint.buildtype.obj
             Releasepostbuildlint.obj
             Release
    emove.obj
             Releasesourceparagraph.obj
             Releasestatusparagraph.obj
             Releasestatusparagraphs.obj
             Release	riplet.obj
             Releaseupdate.obj
             Releasevcpkgcmdarguments.obj
             Releasevcpkglib.obj
             Releasevcpkgpaths.obj
             Releaseversiont.obj
             vcpkglib.vcxproj -> D:vcpkg	oolsrcReleasevcpkglib.lib
           FinalizeBuildStatus:
             正在删除文件“Releasevcpkglib.tlogunsuccessfulbuild”。
             正在对“Releasevcpkglib.tlogvcpkglib.lastbuildstate”执行 Touch 任务。
         3>已完成生成项目“D:vcpkg	oolsrcvcpkglibvcpkglib.vcxproj”(默认目标)的操作。
         2>PrepareForBuild:
             正在创建目录“Releasevcpkg.tlog”。
           InitializeBuildStatus:
             正在创建“Releasevcpkg.tlogunsuccessfulbuild”,因为已指定“AlwaysCreate”。
           ClCompile:
             C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503inHostX86x86CL.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"Releasevc141.pdb
             " /Gd /TP /analyze- /errorReport:queue /std:c++latest ..srcvcpkg.cpp
             vcpkg.cpp
           Link:
             C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503inHostX86x86link.e
             xe /ERRORREPORT:QUEUE /OUT:"D:vcpkg	oolsrcReleasevcpkg.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	oolsrcReleasevcpkg.pdb" /OPT:REF /OPT:ICF /LTCG:incremental /TLBID
             :1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:vcpkg	oolsrcReleasevcpkg.lib" /MACHINE:X86 /SAFESEH Releasevcpkg.obj
             D:vcpkg	oolsrcReleasevcpkglib.lib
             正在生成代码
             All 11899 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
             已完成代码的生成
             vcpkg.vcxproj -> D:vcpkg	oolsrcReleasevcpkg.exe
           FinalizeBuildStatus:
             正在删除文件“Releasevcpkg.tlogunsuccessfulbuild”。
             正在对“Releasevcpkg.tlogvcpkg.lastbuildstate”执行 Touch 任务。
         2>已完成生成项目“D:vcpkg	oolsrcvcpkgvcpkg.vcxproj”(Build 个目标)的操作。
         1>项目“D:vcpkg	oolsrcdirs.proj”(1)正在节点 1 上生成“D:vcpkg	oolsrcvcpkgmetricsuploadervcpkgmetricsuploader.vcxproj”(
           4:2) (Build 个目标)。
         4>PrepareForBuild:
             正在创建目录“Releasevcpkgmet.7D6FDEEB.tlog”。
           InitializeBuildStatus:
             正在创建“Releasevcpkgmet.7D6FDEEB.tlogunsuccessfulbuild”,因为已指定“AlwaysCreate”。
           ClCompile:
             C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503inHostX86x86CL.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"Releasevc141.pdb
             " /Gd /TP /analyze- /errorReport:queue /std:c++latest ..srcvcpkgmetricsuploader.cpp
             vcpkgmetricsuploader.cpp
           Link:
             C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503inHostX86x86link.e
             xe /ERRORREPORT:QUEUE /OUT:"D:vcpkg	oolsrcReleasevcpkgmetricsuploader.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	oolsrcReleasevcpkgmetricsuploader.pdb" /OPT:REF /OP
             T:ICF /LTCG:incremental /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:vcpkg	oolsrcReleasevcpkgmetricsuploader
             .lib" /MACHINE:X86 /SAFESEH Releasevcpkgmetricsuploader.obj
             D:vcpkg	oolsrcReleasevcpkglib.lib
             正在生成代码
             All 1535 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
             已完成代码的生成
             vcpkgmetricsuploader.vcxproj -> D:vcpkg	oolsrcReleasevcpkgmetricsuploader.exe
           FinalizeBuildStatus:
             正在删除文件“Releasevcpkgmet.7D6FDEEB.tlogunsuccessfulbuild”。
             正在对“Releasevcpkgmet.7D6FDEEB.tlogvcpkgmetricsuploader.lastbuildstate”执行 Touch 任务。
         4>已完成生成项目“D:vcpkg	oolsrcvcpkgmetricsuploadervcpkgmetricsuploader.vcxproj”(Build 个目标)的操作。
         1>已完成生成项目“D:vcpkg	oolsrcdirs.proj”(默认目标)的操作。
    
    已成功生成。
        0 个警告
        0 个错误
    
    已用时间 00:00:28.30

    然后,运行如下命令使计算机的所有用户都可以使用vcpkg (备注:需要管理员权限)

            C:srcvcpkg> .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:srcvcpkg> .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
    ",sqlite3_libversion()):
        return 0;
    }

    编译运行

    FAQ

    • 是否支持Visual Studio 2010 ?
      否,后续我会介绍Vcpkg用到的“知识点”,可以为Visual Studio 2010开发相应工具提供借鉴。

    • 是否支持静态编译库
      是,例如vcpkg.exe install xxx:x86-windows-static

    • 没有我需要的库怎么办
      自己写,后续我会介绍如何向Vcpkg新增库

  • 相关阅读:
    IE调试页面总结
    解决XAMPP不能启动Apche服务问题
    WCF与Ajax开发实践系列课程
    Team Foundation 中的错误和事件消息
    设置SVN提交日志必填
    MyBatis.Net 学习手记
    PandorBox 中安装aria2失败的解决办法
    Linux 启动出现 busybox vx.x.xx built-in shell 的问题
    Sql Server 中查询存储过程的修改时间
    ubuntu挂载和挂载NTFS分区命令
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7944938.html
Copyright © 2020-2023  润新知