【软件开发】vcpkg学习笔记
【软件开发】vcpkg 学习笔记
"vcpkg"是一个免费开源的 C++包管理器,可以以此很方便的处理第三方库的接入,且可嵌入进 CMake 中。
入门
入门教程请参照:
https://learn.microsoft.com/zh-cn/vcpkg/get_started/get-started?pivots=shell-cmd
大概的接入流程是:
- 安装 vcpkg。
- 编写 CMakePresets,接入 vcpkg 的 CMake 工具链工具。(CMake 笔记中的 CMakePresets 示例)
- 使用
vcpkg new --application创建清单文件,填写所需库。 - 在 CMakeLists 中使用
find_package()获取 vcpkg 库。 - 使用带有 vcpkg 的 CMakePresets 生成项目,完成接入。
配置
查找包
若要查看 vcpkg 支持的所有包,有两种方式:
- 可以在安装目录的“vcpkg/ports”文件夹内查看。
- 或者从在线的 github 仓库也可以:
https://github.com/microsoft/vcpkg/tree/master/ports
安装包
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 是你自己需要用到该包的项目,而 pkgCMakeName 和 pkgCMakeProjectName 的内容则需要进行推断,具体有三种方法:
- CMake 构建时会自动启发式生成使用方法并打印在构建结果中。
- 通过官方的
usage文件得出,这是官方编写的默认引入方法。 - 通过查看包安装目录的一个文件得出:
例如要引入 gtest,通过查看 vcpkg_installed\x64-windows\share\GTestTargets.cmake 文件,其中文件名前缀GTest即pkgCMakeName,文件内的 add_library(GTest::gtest) 则表明GTest::gtest是pkgCMakeProjectName。
示例引用方式如下:
# 改编自 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学习笔记的更多相关文章
- 微信小程序开发:学习笔记[7]——理解小程序的宿主环境
微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器
- 微信小程序开发:学习笔记[5]——JavaScript脚本
微信小程序开发:学习笔记[5]——JavaScript脚本 快速开始 介绍 小程序的主要开发语言是 JavaScript ,开发者使用 JavaScript 来开发业务逻辑以及调用小程序的 API 来 ...
- 微信小程序开发:学习笔记[4]——样式布局
微信小程序开发:学习笔记[4]——样式布局 Flex布局 新的布局方式 在小程序开发中,我们需要考虑各种尺寸终端设备上的适配.在传统网页开发,我们用的是盒模型,通过display:inline | b ...
- 微信小程序开发:学习笔记[3]——WXSS样式
微信小程序开发:学习笔记[3]——WXSS样式 快速开始 介绍 WXSS(WeiXin Style Sheets)是一套用于小程序的样式语言,用于描述WXML的组件样式,也就是视觉上的效果. WXSS ...
- 微信小程序开发:学习笔记[2]——WXML模板
微信小程序开发:学习笔记[2]——WXML模板 快速开始 介绍 WXML 全称是 WeiXin Markup Language,是小程序框架设计的一套标签语言,结合小程序的基础组件.事件系统,可以构建 ...
- 微信小程序开发:学习笔记[1]——Hello World
微信小程序开发:学习笔记[1]——Hello World 快速开始 1.前往微信公众平台下载微信开发者工具. 地址:https://mp.weixin.qq.com/debug/wxadoc/dev/ ...
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
- 微信小程序开发:学习笔记[8]——页面跳转及传参
微信小程序开发:学习笔记[8]——页面跳转及传参 页面跳转 一个小程序拥有多个页面,我们可以通过wx.navigateTo推入一个新的页面.在首页使用2次wx.navigateTo后,页面层级会有三层 ...
- C# 桌面软件开发-深入学习[2]- AY-C#人爱学不学-aaronyang技术分享
原文:C# 桌面软件开发-深入学习[2]- AY-C#人爱学不学-aaronyang技术分享 1 : C# Assembly.GetEntryAssembly().GetName().Version. ...
- C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享
原文:C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享 曾经我做office,不想依赖别人dll,就使用了 Type.GetTypeFromProgID 可以根 ...
随机推荐
- vue使用docxtemplater导出word
安装 // 安装 docxtemplater npm install docxtemplater pizzip --save // 安装 jszip-utils npm install jszip-u ...
- 【Amadeus原创】华为一键强制关闭后台应用的终极解决方法
华为手机速度是快,用起来很顺手,但是最让人头疼的,就是紧急情况开会,我音乐关不了. 上划把全部应用删掉,也没用. 经过一阵子摸索,发现终极办法: 1, 打开华为自带的 手机助手- 应用启动管理 2, ...
- Shiro简单入门+个人理解(3)
最后一天,对shiro框架的应用也到此为至了,可能不是太全,但相对于一般的项目,它的作用已经使用了很多了 Shiro的授权: 授权:对用户资源访问的授权(是否允许用户访问此资源) 用户访问系统资源时的 ...
- System.Text.Json匿名对象反序列化
以前就是一直使用 Newtonsoft.Json 用起来还是挺舒服的.由于 JSON 的应用越来越广,现在. NET Core 都内置了 System.Text.Json 可以直接对 JSON 进行操 ...
- 【Vue】vue项目搭建、ES6的简单使用(大觅)
目录 项目搭建与基本配置 项目搭建 安装淘宝NPM镜像 cnpm 安装webpack 新建项目 运行项目 运行时出现的一些问题和解决方案 框架安装 安装UI框架iView 引入UI框架iView 引入 ...
- Navicat Premium15安装与激活
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让管理不 ...
- 关于在VMware中安装的CentOS7系统中无法安装ntp
一.问题引言 今天在虚拟机中新安装了CentOS7,在使用yum命令时,出现如下如错误: 2.点击图片中链接,即是"2"中的红框,发现该链接竟不可达 3.于是开始找度娘,但并没有发 ...
- Qt/C++音视频开发55-加密保存到文件并解密播放
一.前言 为了保证视频文件的安全性,有时候需要对保存的视频文件加密,然后播放的时候解密出来再播放,只有加密解密的秘钥一致时才能正常播放,用ffmpeg做视频文件的加密保存和解密播放比较简单,基于ffm ...
- [转]C# Winform 跨线程更新UI控件常用方法汇总
概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现"线程间操作无效: 从不是创建控件的线程访问它"的异常.处理跨线程更新Winform UI控件常用 ...
- 网络编程入门从未如此简单(三):什么是IPv6?漫画式图文,一篇即懂!
本文由小枣君分享,文案:小枣君.漫画:杨洋,来自鲜枣课堂,有少许改动,原文链接见文末. 1.引言 网络编程能力对于即时通讯技术开发者来说是基本功,而计算机网络又是网络编程的理论根基,因而深刻准确地理解 ...