• vcpkg——C/C++的包管理器,在Windows上安装、使用及遇到的问题


    一、介绍

    vcpkg是可用于Windows,linux和MacOS上跨平台的 C/C++ 库管理工具,且开源。

    官网:https://vcpkg.io

    博客园地址:https://www.cnblogs.com/vcpkg/ (这里相当于命令手册)

    目前github需要FQ, 看到有人做了国内镜像:

    https://gitee.com/jackboosy/vcpkg

    镜像设置:

    设置环境变量:
    X_VCPKG_ASSET_SOURCES
    值为:
    x-azurl,http://106.15.181.5/
    并确保你的vcpkg为最新的(重新执行bootstrap脚本)即可。

    二、安装 

    要求:

    • Windows 7 or newer
    • Git
    • Visual Studio 2015 Update 3 or newer

    具体的组件要求可以参考:vcpkg的Visual Studio组件最低要求

    vcpkg会自动安装CMake等组件。

    注意git路径要在PATH中。

    安装步骤:

    很简单,这里有step by step : https://vcpkg.io/en/getting-started.html

    即,(获取vcpkg)从github下载解压,或git获取后,(编译vcpkg)执行vcpkg\bootstrap-vcpkg.bat,即可生成vcpkg.exe

    安装后,将vcpkg所在目录加入PATH。

    三、使用 

    列出已安装的C/C++库

    vcpkg list

    安装C/C++库

    vcpkg install [packages to install]

    例如,安装zlib,不确定vcpkg中有没有这个库,可以使用vcpkg search:

    查看代码
    D:\>vcpkg search zlib
    ace[zlib]                                 Enable zlib support
    boost-iostreams[zlib]                     Support zlib filters
    botan[zlib]                               Build with zlib. Enable compression pipes.
    ………………太多,省略………………
    zlib                     1.2.12#1         A compression library
    zlib-ng                  2.0.6            zlib replacement with optimizations for 'next generation' systems
    zstr                     1.0.4#2          This C++ header-only library enables the use of C++ standard iostreams to ...
    The result may be outdated. Run `git pull` to get the latest results.
    
    If your port is not listed, please open an issue at and/or consider making a pull request:
        https://github.com/Microsoft/vcpkg/issues

    (按照提示,怀疑有vcpkg内容太旧的可能,可以"git pull"重新获取vcpkg最新版本。)

    (如果你是库的作者,没有你的库,可以去https://github.com/Microsoft/vcpkg/issues提交。)

    接下来执行:

    vcpkg install zlib

    默认会安装x86-windows的设置,等价于:

    vcpkg install zlib:x86-windows

    添加环境变量 VCPKG_DEFAULT_TRIPLET=x64-windows 可默认安装64位。

    install命令的详细使用方法:vcpkg 常用命令 - Install

    这个x86-windows 或 x64-windows 叫 triplet,在 vcpkg\triplets 下有哪些配置文件,命令行就可以使用哪些值,

    也可以用命令查看

    vcpkg help triplets

    triplet配置可以指定VC编译器版本、选择静态/动态库、x86/x64等,具体参见:Triplet Files 详细说明(英文)VCPKG 环境变量

    在triplets下有一个x64-windows-static.cmake,是编译静态库用的,上面提到的x86/x64-windows是配置成编译动态库的。

    其中Community triplets是社区提交的,未经持续集成测试。

    在VC项目中使用:

    常规情况下,我们编译或安装一些第三方库后,需要手动设置 include 目录、lib 目录、环境变量等,会有很多工作量。

    vcpkg 提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是vcpkg的一大优势。

    装好库后,只需执行:

    vcpkg integrate install

    即可,这时在VC项目中可以随意#include库的头文件,编译时dll也会自动拷贝到目标目录。

     以上是针对所有项目都可用。

    如果只想集成到一个VS项目中,可用

    vcpkg integrate project

    执行后会在 vcpkg\scripts\buildsystems 目录下,生成nuget配置文件,在VS中添加“程序包源”,安装到项目就可以了。具体操作参见:https://zhuanlan.zhihu.com/p/153199835

    与vcpkg install命令相对的是vcpkg remove <pkg>,删除库;

    与vcpkg integrate install相对的是vcpkg integrate remove,取消全局集成。

    导出C/C++库:

    vcpkg export <pkg>... [opt]…

    例如,导出多个库,且其中一个库要64位版本,并用7z打包:

    查看代码
    > vcpkg export openssl:x64-windows curl zlib --7zip
    The following packages are already built and will be exported:
        curl:x86-windows
        openssl:x64-windows
      * vcpkg-cmake:x64-windows
      * vcpkg-cmake-config:x64-windows
      * vcpkg-cmake-get-vars:x64-windows
        zlib:x86-windows
    Additional packages (*) need to be exported to complete this operation.
    Exporting package vcpkg-cmake:x64-windows...
    Exporting package vcpkg-cmake-config:x64-windows...
    Exporting package vcpkg-cmake-get-vars:x64-windows...
    Exporting package openssl:x64-windows...
    Exporting package zlib:x86-windows...
    Exporting package curl:x86-windows...
    Creating 7zip archive...
    7zip archive exported at: D:\vcpkg\vcpkg-export-20220616-143454.7z
    
    To use the exported libraries in CMake projects use:
        -DCMAKE_TOOLCHAIN_FILE=[...]/scripts/buildsystems/vcpkg.cmake

    export命令其它参数参见:vcpkg 常用命令 - Export

    可以为各平台导出为各种格式。

    卸载

    只需删除 vcpkg 目录。 删除此目录会卸载 vcpkg 以及 vcpkg 已安装的所有库。

    四、问题

    1.使用vcpkg remove删除库,使用了--purge、--recurse参数,再次安装库似乎还是从缓存中恢复的,不知道是什么原因。因为要切换VC版本,不清空缓存的话,库就一直是一个版本没法切换了。

    vcpkg如何全面卸载和重新安装包 中提到:

    如果要vcpkg启动全新的安装,当用remove是不行的,一定要把

    C:\Users\<user>\AppData\Local\vcpkg

    里的内容清空掉才行。

    原因,

    vcpkg的搜索路径貌似是这样的,先到安装地址buildtrees去找

    D:\vcpkg\buildtrees\osg

    然后再到用户目录下面去找,找到了就直接用老的换上去,默认其他都是OK的,如果要完全重新安装,就要把已经有的删除掉。

    2.我使用VS2019安装的VS2015执行vcpkg,总是会编译失败,也没找到原因。

    以上问题,哪位知道请指点一下,不胜感激。

    参考链接:

    Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库

    [工具]包管理工具Vcpkg 的使用

    vcpkg如何全面卸载和重新安装包 

  • 相关阅读:
    【读书笔记】Expert Oracle Architecture (by Tom) (2)
    【读书笔记】Introducing ASP.NET
    【读书笔记】Expert Oracle Architecture (by Tom) (1)
    【原创】ASP.NET学习(3)
    【原创】XSL 学习(1)
    【原创】也谈“异步”响应
    【读书笔记】ASP.NET State Management
    基础算法之枚举
    基础算法之排序查找算法
    开放内网(转)
  • 原文地址:https://www.cnblogs.com/honker/p/16375157.html
Copyright © 2020-2023  润新知