vcpkg:使用 vcpkg

命令

查看Vcpkg支持的开源库列表

查看Vcpkg支持的开源库列表
.\vcpkg\vcpkg search

安装一个开源库

这里的“安装”其实是指下载和编译。

比如我们需要安装常用的jsoncpp库,那么执行命令

.\vcpkg\vcpkg install jsoncpp

输出

Computing installation plan...
A suitable version of cmake was not found (required v3.19.2). Downloading portable cmake v3.19.2...
Extracting cmake...
A suitable version of 7zip was not found (required v18.1.0). Downloading portable 7zip v18.1.0...
Extracting 7zip...
A suitable version of nuget was not found (required v5.5.1). Downloading portable nuget v5.5.1...
Downloading nuget...
  https://dist.nuget.org/win-x86-commandline/v5.5.1/nuget.exe -> C:\Users\oceanstar\vcpkg\win\vcpkg\downloads\22ea847d-nuget.exe

C:\Users\oceanstar\vcpkg\win>.\vcpkg\vcpkg install jsoncpp
Computing installation plan...
A suitable version of cmake was not found (required v3.19.2). Downloading portable cmake v3.19.2...
Extracting cmake...
A suitable version of 7zip was not found (required v18.1.0). Downloading portable 7zip v18.1.0...
Extracting 7zip...
A suitable version of nuget was not found (required v5.5.1). Downloading portable nuget v5.5.1...
The following packages will be built and installed:
    jsoncpp[core]:x86-windows -> 1.9.4
Detecting compiler hash for triplet x86-windows...
A suitable version of powershell-core was not found (required v7.1.0). Downloading portable powershell-core v7.1.0...
Downloading powershell-core...
  https://github.com/PowerShell/PowerShell/releases/download/v7.1.0/PowerShell-7.1.0-win-x86.zip -> C:\Users\oceanstar\vcpkg\win\vcpkg\downloads\PowerShell-7.1.0-win-x86.zip

C:\Users\oceanstar\vcpkg\win>.\vcpkg\vcpkg install jsoncpp
Computing installation plan...
The following packages will be built and installed:
    jsoncpp[core]:x86-windows -> 1.9.4
Detecting compiler hash for triplet x86-windows...
A suitable version of powershell-core was not found (required v7.1.0). Downloading portable powershell-core v7.1.0...
Extracting powershell-core...
Could not locate cached archive: C:\Users\oceanstar\AppData\Local\vcpkg\archives\ca\ca86469a9ddb0e4cd2f352ca94cbfdc3993b0b17.zip
Starting package 1/1: jsoncpp:x86-windows
Building package jsoncpp[core]:x86-windows...
-- Downloading https://github.com/open-source-parsers/jsoncpp/archive/9059f5cad030ba11d37818847443a53918c327b1.tar.gz -> open-source-parsers-jsoncpp-9059f5cad030ba11d37818847443a53918c327b1.tar.gz...
-- Extracting source C:/Users/oceanstar/vcpkg/win/vcpkg/downloads/open-source-parsers-jsoncpp-9059f5cad030ba11d37818847443a53918c327b1.tar.gz
-- Using source at C:/Users/oceanstar/vcpkg/win/vcpkg/buildtrees/jsoncpp/src/3918c327b1-034a82149a.clean
-- Configuring x86-windows
-- Building x86-windows-dbg
-- Building x86-windows-rel
-- Installing: C:/Users/oceanstar/vcpkg/win/vcpkg/packages/jsoncpp_x86-windows/share/jsoncpp/copyright
-- Performing post-build validation
-- Performing post-build validation done
Stored binary cache: C:\Users\oceanstar\AppData\Local\vcpkg\archives\ca\ca86469a9ddb0e4cd2f352ca94cbfdc3993b0b17.zip
Building package jsoncpp[core]:x86-windows... done
Installing package jsoncpp[core]:x86-windows...
Installing package jsoncpp[core]:x86-windows... done
Elapsed time for package jsoncpp:x86-windows: 53.86 s

Total elapsed time: 1.654 min

The package jsoncpp:x86-windows provides CMake targets:

    find_package(jsoncpp CONFIG REQUIRED)
    target_link_libraries(main PRIVATE jsoncpp_lib jsoncpp_object)

我们大致可以了解到install会经历这几个过程:

  • 环境初始化
  • 下载源代码(如果已经在cache中,则不下载)
  • 校验文件有效性
  • 解压缩源代码
  • 利用配套工具配置源码工程,在这里是使用的是cmake(如果是ffmpeg,则用msys2)
  • 编译源码。一般会同时编译Release和Debug版本。
  • 把编译好的文件拷贝到相关目录中去(一般是installed目录)

指定编译某种架构的程序库

如果不指定安装的架构,vcpkg默认把开源库编译成x86的Windows版本的库。那vcpkg总共支持多少种架构呢?我们可以使用如下命令便知:

.\vcpkg.exe help triplet

vcpkg支持众多架构,有arm-uwp, arm-windows, arm64-uwp, arm64-windows, x64-linux, x64-osx, x64-uwp, x64-windows, x64-windows-static, x86-uwp, x86-windows, x86-windows-static。

那如果要安装编译某一个架构的开源库,我们该怎么写呢?我们只需要在需要安装的包后面指定相应的triplet即可。例如我们需要编译64位版本的jsoncpp,那么执行如下命令即可。

.\vcpkg.exe install jsoncpp:x64-windows

移除一个已经安装(编译)的开源库

如果移除一个已经安装的开源库,那么执行remove指令即可。比如我们要移除jsoncpp,那么执行命令:

.\vcpkg.exe remove jsoncpp

注意:

  • 这个时候只是移除了默认的x86-winodws版本的文件,如果有其他平台的版本需要移除,需要制定相应的triplet。
  • 移除也只是移除了二进制程序库而已,源码包和解压缩的源码并没有删除。

如果想要一键移除“过时”的包,执行命令:

.\vcpkg.exe remove --outdated

已安装的包更新

一般有两种更新方式。一个是update指令,可以显示可以升级的开源库的列表。另一个是upgrade的指令,会重新编译所有需要更新的包。

C:\Users\oceanstar\vcpkg\win\vcpkg》 vcpkg upgrade

导出已经安装的开源库

有的时候,一个项目组中有很多人,不需要每个人都参与编译。一个人编译好所有开源库后到处给别人即可。有的时候也是出于备份的目的,也会导出已经安装的开源库。导出可以执行export指令。例如,我要导出jsoncpp库,那么执行:

.\vcpkg.exe export jsoncpp --7zip

注意,导出时必须指定导出的包格式。vcpkg支持5种导出包格式,有:
vcpkg:使用 vcpkg_第1张图片
一般地,导出包的格式为:vcpkg-export-<日期>-<时间>

默认情况下只会导出x86-windows的包,如果要导出所有包,那需要制定相应的triplet。比如,如果同时导出x86和x64版本的jsoncpp,那执行命令:

.\vcpkg.exe export jsoncpp jsoncpp:x64-windows --7zip

这个命令等价于:

.\vcpkg.exe export jsoncpp:x86-windows jsoncpp:x64-windows --7zip

如果要指定输出目录和特定文件名,需使用"–output="参数

导入备份的开源库

.\vcpkg.exe import xxx.7z

解决vcpkg下载缓慢

第一步:去vcpkg里把下载链接复制出来,Downing后面的就是我们的下载链接
在这里插入图片描述
第二步:在外面用浏览器或别的下载工具下载这个文件
在这里插入图片描述
第三步:我们进去\vcpkg\downloads\temp这个文件夹中看看vcpkg对这个文件的命名是什么
在这里插入图片描述
第四步:将我们的文件也命名成这个,直接复制粘贴即可,然后放到\vcpkg\downloads\这个文件夹里

第五步:直接点击右上角关闭按钮关闭vcpkg,重新打开,重新输入install命令即可,可以看到vcpkg已经采用了我们自己下好的包而不是它重新下一个了,这里利用的是vcpkg的缓存机制

# 搜索想要安装的包
C:\Users\oceanstar\vcpkg\win\vcpkg》 vcpkg search libssh2
curl[ssh]                             SSH support via libssh2
libgit2[ssh]                          SSH support via libssh2
libssh2              1.9.0            The SSH library

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

# 安装指定的包,curl包分号后面的表示架构
C:\Users\oceanstar\vcpkg\win\vcpkg》 vcpkg install libssh2:x64-windows




# 列出已经安装的包
C:\Users\oceanstar\vcpkg\win\vcpkg》 vcpkg list

# 已安装的包更新
C:\Users\oceanstar\vcpkg\win\vcpkg》 vcpkg upgrade

# 删除已安装的包
C:\Users\oceanstar\vcpkg\win\vcpkg》 **vcpkg remove libssh2:x64-windows

Vcpkg和Visual Studio的集成

上面我们已经安装了一些第三方库,那如何使用呢?常规情况下,我们需要设置include目录、lib目录等,会有很多工作量。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是Vcpkg的一大优势。

集成到全局

“集成到全局”适用于Visual Studio开发环境和msbuild命令行。执行命令:

\win\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=C:/Users/oceanstar/vcpkg/win/vcpkg/scripts/buildsystems/vcpkg.cmake"

当出现“Applied user-wide integration for this vcpkg root.”字样的时候,说明已经集成成功。这时候可以在任意的工程中使用安装好的第三方库。

移除全局集成

 .\vcpkg integrate remove

集成到工程

上面已经可以集成到全局,为什么还要“集成到工程”呢?因为在大部分情况下,我们不希望集成到全局,毕竟有很多第三方库我们希望自定义处理一下,或者干脆不想集成第三方库。那么集成到工程是最灵活的处理方式。也是工程级项目推荐的处理方式。

“集成到工程”是整个vcpkg中最复杂的一项,它需要利用Visual Studio 中的nuget插件来实现。我们接下来一步一步来说。

生成配置

 .\vcpkg integrate project

这时候会在\scripts\buildsystems目录下,生成nuget配置文件.
其中是指vcpkg实际所在目录。

基本配置

你可能感兴趣的:(工具软件)