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如何全面卸载和重新安装包 

 

posted on 2022-06-17 08:58  honker  阅读(10632)  评论(0编辑  收藏  举报