【软件开发】vcpkg 学习笔记

"vcpkg"是一个免费开源的 C++包管理器,可以以此很方便的处理第三方库的接入,且可嵌入进 CMake 中。

入门

入门教程请参照:

https://learn.microsoft.com/zh-cn/vcpkg/get_started/get-started?pivots=shell-cmd

大概的接入流程是:

  1. 安装 vcpkg。
  2. 编写 CMakePresets,接入 vcpkg 的 CMake 工具链工具。(CMake 笔记中的 CMakePresets 示例)
  3. 使用vcpkg new --application创建清单文件,填写所需库。
  4. 在 CMakeLists 中使用find_package()获取 vcpkg 库。
  5. 使用带有 vcpkg 的 CMakePresets 生成项目,完成接入。

配置

查找包

若要查看 vcpkg 支持的所有包,有两种方式:

安装包

vcpkg 支持“经典模式”和“清单模式”两种方式安装包:

  • 经典模式,通过终端指令程序化处理。
  • 清单模式,通过编辑根目录的“vcpkg.json”文件处理。

推荐使用清单模式,因为这样使用更透明更清晰:

https://learn.microsoft.com/zh-cn/vcpkg/reference/vcpkg-json

文件内容示例如下:

{
"dependencies": [
"gtest",
{
"name": "imgui",
"features": ["dx12-binding", "win32-binding"]
}
]
}

锁定版本

要想锁定包版本必须先提供基线参数,基线参数是 vcpkg 仓库一次提交的 SHA(必须是本地 vcpkg 仓库中存在的版本),这样所有包版本将都被限制于必须大于等于该基线时的版本。

当提供基线后才可以使用overrides参数进行版本覆盖,以强制使用特定版本,示例如下:

{
"builtin-baseline": "333ba63a16024f05f9172fe403f9eced000389e5",
"overrides": [
{
"name": "imgui",
"version": "1.91.0"
}
]
}

引用包

关于每个包在 CMakeLists 中的使用,一般由以下两个命令构成:

find_package(<pkgCMakeName> CONFIG REQUIRED)
target_link_libraries(<projectName> PRIVATE <pkgCMakeProjectName>)

其中 projectName 是你自己需要用到该包的项目,而 pkgCMakeNamepkgCMakeProjectName 的内容则需要进行推断,具体有三种方法:

  1. CMake 构建时会自动启发式生成使用方法并打印在构建结果中。
  2. 通过官方的usage文件得出,这是官方编写的默认引入方法。
  3. 通过查看包安装目录的一个文件得出:

    例如要引入 gtest,通过查看 vcpkg_installed\x64-windows\share\GTestTargets.cmake 文件,其中文件名前缀GTestpkgCMakeName,文件内的 add_library(GTest::gtest) 则表明GTest::gtestpkgCMakeProjectName

示例引用方式如下:

# 改编自 gtest 的 usage 文件
find_package(GTest CONFIG REQUIRED)
target_link_libraries(Executable PRIVATE GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main)
# 通过分析 imguiTargets.cmake 得出
find_package(imgui CONFIG REQUIRED)
target_link_libraries(Executable PRIVATE imgui::imgui)

【软件开发】vcpkg学习笔记的更多相关文章

  1. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  2. 微信小程序开发:学习笔记[5]——JavaScript脚本

    微信小程序开发:学习笔记[5]——JavaScript脚本 快速开始 介绍 小程序的主要开发语言是 JavaScript ,开发者使用 JavaScript 来开发业务逻辑以及调用小程序的 API 来 ...

  3. 微信小程序开发:学习笔记[4]——样式布局

    微信小程序开发:学习笔记[4]——样式布局 Flex布局 新的布局方式 在小程序开发中,我们需要考虑各种尺寸终端设备上的适配.在传统网页开发,我们用的是盒模型,通过display:inline | b ...

  4. 微信小程序开发:学习笔记[3]——WXSS样式

    微信小程序开发:学习笔记[3]——WXSS样式 快速开始 介绍 WXSS(WeiXin Style Sheets)是一套用于小程序的样式语言,用于描述WXML的组件样式,也就是视觉上的效果. WXSS ...

  5. 微信小程序开发:学习笔记[2]——WXML模板

    微信小程序开发:学习笔记[2]——WXML模板 快速开始 介绍 WXML 全称是 WeiXin Markup Language,是小程序框架设计的一套标签语言,结合小程序的基础组件.事件系统,可以构建 ...

  6. 微信小程序开发:学习笔记[1]——Hello World

    微信小程序开发:学习笔记[1]——Hello World 快速开始 1.前往微信公众平台下载微信开发者工具. 地址:https://mp.weixin.qq.com/debug/wxadoc/dev/ ...

  7. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  8. 微信小程序开发:学习笔记[8]——页面跳转及传参

    微信小程序开发:学习笔记[8]——页面跳转及传参 页面跳转 一个小程序拥有多个页面,我们可以通过wx.navigateTo推入一个新的页面.在首页使用2次wx.navigateTo后,页面层级会有三层 ...

  9. C# 桌面软件开发-深入学习[2]- AY-C#人爱学不学-aaronyang技术分享

    原文:C# 桌面软件开发-深入学习[2]- AY-C#人爱学不学-aaronyang技术分享 1 : C# Assembly.GetEntryAssembly().GetName().Version. ...

  10. C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享

    原文:C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享 曾经我做office,不想依赖别人dll,就使用了 Type.GetTypeFromProgID 可以根 ...

随机推荐

  1. 强网杯2023 谍影重重3.0 wp

    参考文章:[使用主动探测方法识别 U2hhZG93c29ja3M=(base64) 服务 - Phuker's Blog]:https://phuker.github.io/posts/U2hhZG9 ...

  2. 【论文系列】PPO知识点梳理 (尽我可能细致通俗理解!)

    零.题记 这篇博客一方面为了记录当前的知识点,另一方面PPO算法实在是太重要了,不但要从理论上理解它到底是怎样实现的,还需要从代码方面进行学习和记录,这里我就通俗的将这个知识点进行简单的记录,用来日后 ...

  3. Postman无法启动

    前情 最近在捣鼓node.js,需要一个接口测试工具,而Postman是业界有名的接口测试工具,自然接口测试就用它了. 坑 已经有一段时间没启动Postman了,突然发现启动一直卡在修复界面,重启也不 ...

  4. MeteoInfo-Java解析与绘图教程(九)_JAVA解析天气雷达基数据

    MeteoInfo在这两年中也更新了很多,其中对新一代标准格式多普勒天气雷达基数据的解析以及绘制是对Java开发者最好的拓展,其中Java可以做到基本要素绘图,例如基本反射率,基本速度等,还有二次产品 ...

  5. R数据分析,codewar的年终总结,和一周年总结,寒假快乐呀

    前阵子单位各个部门都在要求弄总结,想想自己这个公众号也写了快一年了,专门回去翻了翻,这个公众号发布的第一篇文章是在2021年的1月17日,我想2022年的1月17日我就把现在敲的文字推出来吧,也算是一 ...

  6. Flutter showModalBottomSheet改变高度

    showModalBottomSheet改变高度 将isScrollControlled设置为true,此时弹窗会全屏展示,再返回一个带高度的SizedBox,就可以指定弹窗的高度了 showModa ...

  7. 把 Windows 装进 Docker 容器里

    本篇文章聊聊如何在 Docker 里运行 Windows 操作系统, Windows in Docker Container(WinD). 写在前面 我日常使用 macOS 和 Ubuntu 来学习和 ...

  8. 在linux上Git配置多个SSH-Key

    Git配置多个SSH-Key SSH Key 背景 当有多个git账号时,比如: a. 一个gitee,用于公司内部的工作开发: b. 一个github,用于自己进行一些开发活动: c.一个gitla ...

  9. JSON解析的这6种方案,真香!

    前言 在 Java 开发中,解析 JSON 是一个非常常见的需求. 不管是和前端交互.调用第三方接口,还是处理配置文件,几乎都绕不开 JSON. 这篇文章总结了6种主流的 JSON 解析方法,希望对你 ...

  10. CDS标准视图:技术对象检验级别描述 I_TechObjInspectionLevelText

    视图名称:技术对象检验级别描述 I_TechObjInspectionLevelText 视图类型:基础视图 视图代码: 点击查看代码 @AbapCatalog: { sqlViewName: 'IT ...