记录点滴
品味人生

vcpkg - 开源的C/C++包管理工具

开发C/C++程序时,少不了编译开源的第三方库,但是编译和使用第三方库时,往往存在着诸多问题:

  • 编译方式:有的基于configure、make,有的基于vc工程,有的基于cmake等等。
  • 编译类型:debug还是release、动态库还是静态库、32位还是64位等等。
  • 编译环境:开源库可能还依赖于其他第三方库,环境准备也是难点。
  • 集成第三方库:根据软件项目类型及环境,工程目录也必须仔细设定才能保证软件项目能够正常编译。

为解决以上痛点,微软推出了开源工具vcpkg,项目地址:https://github.com/microsoft/vcpkg,它具备以下优点:

  • 多平台支持,Windows、Linux和MacOS。
  • 多编译类型支持。
  • 自动检查编译关系并准备。
  • 源码包的缓存管理和版本管理,支持升级版本。
  • 轻松编译。
  • 集成Visual Studio与cmake项目,只需简单配置。

安装

Windows

环境需求:

  • Windows 7或更新的版本。
  • Git
  • 编译环境:Visual Studio 2015或最新版本、Mingw等(自选)。

下载vcpkg源码并执行bootstrap脚本:

git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap_vcpkg.bat

Unix

Linux环境需求:

  • Git
  • g++ >= 6

MscOS环境需求:

  • Apple Developer Tools
  • MacOS 10.14及更低版本中,还需要:
    • Homebrew
    • Homebrew中g++ >= 6

下载vcpkg源码并执行bootstrap脚本:

git clone https://github.com/microsoft/vcpkg
./vcpkg/bootstrap_vcpkg.sh

使用

以下主要以Windows平台为例。

使用前,建议将vcpkg路径设置到系统环境变量PATH中,这样方便在任意路径下直接执行vcpkg。

库管理

列出已编译库:

vcpkg list

根据关键字搜索vcpkg支持编译的库,其中PACKAGE为该关键字:

vcpkg search PACKAGE

安装库,这里先说一下,vcpkg支持编译多种类型的库,默认为x86-windows,也就是32位的vs平台编译的版本。这里可以通过指令查看vcpkg支持编译的类型:

vcpkg help triplet

可以看到:

Available architecture triplets
VCPKG built-in triplets:
  arm-uwp
  arm64-windows
  x64-linux
  x64-osx
  x64-uwp
  x64-windows-static
  x64-windows
  x86-windows

VCPKG community triplets:
  arm-android
  arm-ios
  arm-linux
  arm-mingw-dynamic
  arm-mingw-static
  arm-neon-android
  arm-windows
  arm64-android
  arm64-ios
  arm64-linux
  arm64-mingw-dynamic
  arm64-mingw-static
  arm64-osx-dynamic
  arm64-osx
  arm64-uwp
  arm64-windows-static-md
  arm64-windows-static
  armv6-android
  ppc64le-linux
  s390x-linux
  wasm32-emscripten
  x64-android
  x64-ios
  x64-mingw-dynamic
  x64-mingw-static
  x64-openbsd
  x64-osx-dynamic
  x64-windows-static-md
  x86-android
  x86-freebsd
  x86-ios
  x86-mingw-dynamic
  x86-mingw-static
  x86-uwp
  x86-windows-static-md
  x86-windows-static
  x86-windows-v120

所以,当安装库时,我们可以选择相应的类型,其中PACKAGE为库名,TRIPLET为指定编译的类型:

vcpkg install PACKAGE:TRIPLET

也可以通过配置系统环境变量来指定默认编译的类型,其中TRIPLET为指定编译的类型:

VCPKG_DEFAULT_TRIPLET = TRIPLET

移除指定库,其中PACKAGE为库名,TRIPLET为指定编译的类型:

vcpkg remove PACKAGE:TRIPLET

更新所有库:

vcpkg update

vcpkg也支持导出已编译的库,支持导出的格式有raw、nuget、zip、7zip、ifw,必须在命令行中指定导出格式,其中PACKAGE为库名,TRIPLET为指定编译的类型,TYPE为导出的类型:

vcpkg export PACKAGE:TRIPLET --TYPE

集成

编译好第三方库后,如何使用呢?传统模式中,我们需要配置include目录、lib目录,添加编译选项等等,这里vcpkg提供了更便捷的集成方式。

集成到Visual Studio

全局集成

运行以下命令 (首次启动需要管理员权限):

vcpkg integrate install

无需其他命令,即可在任意Visual Studio项目中直接使用库。

移除集成也很简单,运行以下命令:

vcpkg integrate remove
工程集成

很多时候我们希望自定义处理第三方库或者根本不想集成第三方库,那么工程集成就是最灵活的处理方式。

运行以下命令,会在vcpkg_root\scripts\buildsystems下生成nuget文件:

vcpkg integrate project

打开Visual Studio,点击“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击左侧“程序包源”,右侧点击“加号”添加一个源,名称改为vcpkg,源选择vcpkg_root\scripts\buildsystems目录,点击“更新”,点击“确定”关闭设置对话框。

当希望将vcpkg的第三方包集成到某个工程时,在Visual Studio中右键需要设置的工程,选择“管理NuGet程序包”,右上角的“程序包源”中选择上面设置的“vcpkg”,在“浏览”选项卡中就可以看到“vcpkg.H.Repos.vcpkg”,点击最右侧的安装,这样就只针对于此工程集成vcpkg的第三方包了。

集成到cmake工程

跨平台安装(编译)工具cmake越来越火,所以针对cmake工程vcpkg也提供了相应的集成解决方案。

通过修改cmake命令行参数

只需在命令行中添加以下内容就行,其中vcpkg_root为vcpkg安装的根目录:

-DCMAKE_TOOLCHAIN_FILE=vcpkg_root/scripts/buildsystems/vcpkg.cmake"

如果是链接静态库,还需要添加额外的内容,以x64-mingw-static为例:

-DVCPKG_TARGET_TRIPLET=x64-mingw-static
通过修改CMakeLists.txt

以下添加所有内容务必要在CMakeLists.txt中project()之前,保证cmake可以加载到toolchain,其中vcpkg_root为vcpkg安装的根目录:

set(CMAKE_TOOLCHAIN_FILE "vcpkg_root/scripts/buildsystems/vcpkg.cmake")

如果是链接静态库,还需要添加额外的内容,以x64-mingw-static为例:

set(VCPKG_TARGET_TRIPLET "x64-mingw-static")
赞(1) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《vcpkg - 开源的C/C++包管理工具》
文章链接:https://blog.bone4sh.cn/post-9.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到: 更多 (0)

相关推荐

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下吧

支付宝扫一扫打赏

微信扫一扫打赏