在Visual Studio/Qt Creator 中使用CMake安装和使用vcpkg包

news2024/9/23 1:31:46

文章目录

    • 0. vcpkg简介和安装
      • 0.1 vcpkg简介
      • 0.2 vcpkg安装
        • 0.2.1 如何在Visual Studio 2022以及以上版本中安装vcpkg
        • 0.2.2 在其他VS版本或Qt Creator等平台上中安装vcpkg
    • 1. 在Visual Studio 中使用CMake安装和使用vcpkg包
      • 1.1 创建Visual Studio项目
      • 1.2 设置项目文件
        • a. 配置`CMakePresets.json`文件:
        • b. 编辑`CMakeList.txt`文件
        • c. 修改`HelloWorldVS.cpp`文件
      • 1.3 生成并运行该项目
    • 2. 在Qt Creator中使用CMake安装和使用vcpkg包
      • 2.1 启用vcpkg插件及设置
      • 2.2 创建Qt项目
      • 2.3 编辑vcpkg清单文件
    • 3. 碰到的一些问题
    • 附 参考文献

0. vcpkg简介和安装

0.1 vcpkg简介

vcpkg 是 Microsoft 和 C++ 社区维护的免费开放源代码 C/C++ 包管理器。 它于 2016 年推出,可帮助开发人员将项目迁移到较新版本的 Visual Studio。 vcpkg 已演变成 Windows、macOS 和 Linux 上开发人员使用的跨平台工具。 vcpkg 拥有大量开放源代码库注册表和企业就绪功能,旨在通过支持任何构建和项目系统来促进开发过程。 vcpkg 是核心的 C++ 工具,使用 CMake 中的脚本以 C++ 语言编写。 它从头开始设计,以解决 C/C++ 开发人员体验的独特难点。

0.2 vcpkg安装

0.2.1 如何在Visual Studio 2022以及以上版本中安装vcpkg

从 Visual Studio 2022 开始,vcpkg 已经被包含在 Visual Studio Installer 中,你可以直接在安装或修改 Visual Studio 时选择安装 vcpkg。具体步骤如下:

  1. 打开 Visual Studio 安装器,选择安装或修改 Visual Studio 2022。
  2. 在安装页面中,选择你需要的工具选项,例如“C++桌面开发”。
  3. 在组件页面中,勾选 “vcpkg - C++库管理器”。
  4. 点击修改或安装,等待安装完成。
  5. 安装完成后,你就可以使用 vcpkg 了。
    在这里插入图片描述
0.2.2 在其他VS版本或Qt Creator等平台上中安装vcpkg
  1. 从github上克隆存储库
    创建文件夹如C:\dev,将vcpkg从github中克隆到当前文件夹中
git clone https://github.com/microsoft/vcpkg.git
  1. 运行启动脚本
    启动脚本执行先决条件检查并下载 vcpkg 可执行文件。
cn vcpkg && bootstrap-vcpkg.bat

运行成功,会给出如下提示
在这里插入图片描述

  1. 设置环境变量
    打开环境变量设置窗口:我的电脑【右键】-> 属性 -> 高级系统设置 -> 环境变量,选择Path,点击“编辑”,将C:\dev\vcpkg添加后确定。

1. 在Visual Studio 中使用CMake安装和使用vcpkg包

1.1 创建Visual Studio项目

  1. 使用“CMake项目”模版创建项目
    在这里插入图片描述
  2. 项目命名为HelloWorldVS,并选中“将解决方案和项目放在同一目录中”的复选框,点击“创建”
    在这里插入图片描述
  3. 生成清单文件并添加依赖项
  • 打开VS中的【开发人员命令提示】
    在这里插入图片描述
  • 运行以下命令来创建vcpkg清单文件(vcpkg.json)
vcpkg new --application

运行成功后,可以看到项目目录中多了一个vcpkg.json文件和一个vcpkg-configuration.json文件
在这里插入图片描述

  • 添加fmt包作为依赖项:
vcpkg add port fmt

运行成功后,可在vcpkg.json文件中看到:

{
  "dependencies": [
    "fmt"
  ]
}

1.2 设置项目文件

a. 配置CMakePresets.json文件:
  • CMakePresets.json文件重命名为CMakeUserPresets.json
  • 如下所示更新其内容,将 <VCPKG_ROOT> 替换为至 vcpkg 目录的路径。
{
  "version": 2,
  "configurePresets": [
    {
      "name": "default",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "<VCPKG_ROOT>/scripts/buildsystems/vcpkg.cmake"
      }
    }
  ]
}
b. 编辑CMakeList.txt文件

在vs自动创建项目时自动生成的CMakeList.txt中添加一下两行代码,并重新"生成CMake缓存"

find_package(fmt CONFIG REQUIRED)
target_link_libraries(HelloWorldVS PRIVATE fmt::fmt)

在这里插入图片描述

c. 修改HelloWorldVS.cpp文件
#include "HelloWorldVS.h"
#include <fmt/core.h>

using namespace std;
int main()
{
	cout << "Hello CMake." << endl;
	fmt::print("Hello World.");
	return 0;
}

1.3 生成并运行该项目

a. 生成项目
按下 Ctrl+Shift+B 以在 Visual Studio 中生成项目。
b. 运行应用程序
选择并运行可执行文件
在这里插入图片描述

可以看到输出:

在这里插入图片描述
示例代码下载:HelloWorldVS.zip

2. 在Qt Creator中使用CMake安装和使用vcpkg包

2.1 启用vcpkg插件及设置

  1. 启用vcpkg插件
    在这里插入图片描述
  2. 设置vcpkg参数
  • 选择“工具”->“Preferences ”,打开设置界面,选择CMake,
    在这里插入图片描述
  • 设置vcpkg路径(如C:\dev\vcpkg
    在这里插入图片描述

2.2 创建Qt项目

  1. 按照QtCreator引导创建新的项目HelloWorldQt,在‘构建系统’页面选择Build system为CMake
    在这里插入图片描述
  2. 创建清单文件(vcpkg.json)
    a. 文件-> New File -> vcpkg -> vcpkg.json Manifest File -> 选择…
    在这里插入图片描述

b. 在弹出的Location对话框中,可以输入文件名(默认为vcpkg.json)和路径(默认为当前项目路径);可以编辑清单内容(默认添加了fmt库)
c. 完成后,项目中会自动生成一个vcpkg.json文件,同时并将该文件添加到了CMakeList.txt中
在这里插入图片描述

2.3 编辑vcpkg清单文件

  1. 添加vcpkg包,如fmt
    在这里插入图片描述
  2. 生成CMake配置文件代码
    在这里插入图片描述
    将以上复制的内容,添加到CMakeList.txt文件中,注意需要将target_link_libraries中的目标改为当前项目的可执行文件名(如main改为HelloWorld
    在这里插入图片描述
  3. 配置vcpkg的路径
    a. 项目->Initial Configuration->添加 string
    秘钥:CMAKE_TOOLCHAIN_FILE
    值:vcpkg的安装路径下的vcpkg.cmake的完整路径,注意路径是斜线/
    b. 点击Re-configure with Initial Parameters
    在这里插入图片描述
  4. 修改main.cpp,并构建运行
    在这里插入图片描述

示例代码下载:HelloWorldQT

3. 碰到的一些问题

  1. 报错: could not find a package configuration file provided by "fmt" with any of ...
    在这里插入图片描述
    解决方法:
    a. 检查CMAKE_TOOLCHAIN_FILE变量值路径是否设置正确;
    b. 如设置正确,若在vs中重新生成一下cmake的缓存,若在qt Creator中则点击Re-configure with Initial Parameters重新生成一下cmake的配置;

  2. 报错:The plain signature for target_link_libraries has already been used with ...
    在这里插入图片描述
    解决方法:
    在使用target_link_libraries过程中,要么为所有元素指定PUBLIC// PRIVATE,要么不指定。
    在本例中,我们只需要删除target_link_libraries中的PRIVATE,再来执行CMake即可。
    在这里插入图片描述

附 参考文献

  1. vcpkg 概述 https://learn.microsoft.com/zh-cn/vcpkg/get_started/overview
  2. 在 Visual Studio 中使用 CMake 安装和使用包https://learn.microsoft.com/zh-cn/vcpkg/get_started/get-started-vs?pivots=shell-cmd
  3. vcpkg Package Managerhttps://doc.qt.io/qtcreator/creator-vcpkg.html
  4. Create vcpkg manifest fileshttps://doc.qt.io/qtcreator/creator-how-to-create-vcpkg-manifest-files.html
  5. Edit vcpkg manifest fileshttps://doc.qt.io/qtcreator/creator-how-to-edit-vcpkg-manifest-files.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性方程组迭代算法的Python实现

更多精彩&#xff0c;关注博客园主页&#xff0c;不断学习&#xff01;不断进步&#xff01; 我的主页 csdn很少看私信&#xff0c;有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容&#xff1a; ABAQUS数值模拟相关Python科学计算开源框架&#xff0c;编程…

pip 安装 scikit-learn

第一步&#xff1a;更新pip 可以首先执行 python -m ensurepip 然后执行 python -m pip install --upgrade pip 即可更新完毕。 python -m ensurepip python -m pip install --upgrade pip第二步 安装sklearn的时候一定要注意顺序。 安装顺序&#xff1a;numpy / scipy / ma…

汇编语言入门基础(访问寄存器和内存)

目录 访问寄存器和内存 2.1 寄存器是CPU内部的信息存储单元 2.1.1 通用寄存器--以AX为例 2.1.2 将AX分成AH与AL 2.2 “字”再寄存器中的存储 2.3 mov和add指令 2.3.1 练习1 2.3.2 练习2 2.4 确定物理地址的方法 2.4.1 物理地址 2.4.2 8086CPU给出物理地址的方法 2.4.…

swin和vit

参考&#xff1a;https://blog.csdn.net/weixin_44878336/article/details/125444556 Swin Transformer与Vision Transformer的对比 二者的不同之处&#xff1a; Swin-Transformer所构建的特征图是具有层次性的&#xff0c;很像我们之前将的卷积神经网络那样&#xff0c;随着…

基于检索增强生成 (RAG) 的大语言模型优化研究

复旦大学的研究人员对检索增强生成技术 (RAG) 的现有方法进行了系统性的研究&#xff0c;提出了一种三步式方法来优化 RAG 框架&#xff0c;并通过实验证明了该方法在提高大型语言模型性能方面的有效性&#xff0c;特别是在多模态检索和问答方面的应用。 论文介绍 基于检索的…

HexView 刷写文件脚本处理工具-基本功能介绍(二)-导入文件

菜单 保存(Save) 在对数据进行任何修改后(例如修改十六进制行或块的基地址),保存选项将被启用。这表示文件已被修改。在这种情况下,“保存”选项允许你将数据存储到当前文件名中。Hexview会以当前文件格式写入数据。当前文件格式显示在状态行中。 另存为(Save as) 允…

LVS详细介绍及常见模式(NAT,DR,防火墙标记)实验详解

目录 一、什么是LVS 二、LVS的核心思想 三、 LVS的优势 四、LVS的调度算法 4.1. LVS的调度算法类型 4.2. LVS静态调度算法 4.3. LVS动态调度算法 4.4.在4.15版本内核以后新增调度算法 五、LVS软件相关信息 六、ipvsadm命令 七、 LVS的NAT模式实验详解 7.1实验环境 7.…

“DS18B20,感知每一度细微变化,记录每一刻温暖。”#DS18B20温度传感器

“DS18B20&#xff0c;感知每一度细微变化&#xff0c;记录每一刻温暖。”#DS18B20温度传感器 前言预备知识1.DS18B20核心参数2.DS18B20初始化函数代码编写2.1分析DS18B20初始化时序图2.2依据时序图编写相应代码 3.向DS18B20写入一个字节函数代码编写3.1分析DS18B20写时序图3.2…

Zoho工作邮箱支持哪些功能?

工作域名邮箱都有哪些常见功能呢&#xff1f;一、消息流 &#xff1b;二、邮件委托给同事代为处理&#xff1b;三、附件查看器 &#xff1b;四、在邮箱里直接和同事音频/视频通话等八大功能。 一、消息流 - 邮箱里的社交渠道 Zoho Mail等专业工作邮箱平台引入了消息流功能&…

免账户免权限免费获取 A股 全市场股票ETF指数 分钟级数据

日期 2024/8/2 意外发现的&#xff0c;抛砖引玉&#xff0c;测试了下&#xff0c;其他券商的也可以。 可以直接获取 1m 5m 1day 级别的数据&#xff0c;全A股市场的都可以。期货未测试。 需要 其他的级别的分数数据可以自行合成。 原理 券商版qmt获取行情数据时&#xff0c;不…

JavaSE之常用API(后篇)

接上篇 五、Random 5.1 使用 5.2 练习 六、包装类 6.1 是什么 包装类:封装了基本类的一些操作,更加方便使用 为了对象的完整性,更重要的是配合泛型一起使用 byte Byte short Short int Integer long Long float Float double Double boolean Boolean char Character 八种包装…

Cadence学习笔记 Day0 Cadence17.4环境安装

当然是选择“吴法安装” 直接跟着吴川斌博客的方法来就可以了&#xff0c;这里大致记录一下我的安装步骤&#xff1a; 安装许可证管理器破解许可证管理器安装软件以及补丁破解软件 获取 直接放出链接&#xff1a;吴川斌的博客 下载得到&#xff1a; 一、安装许可证管理器&am…

Redis未授权利用方式总结

前言 目前的大多数网站搭建的Redis 均采用 docker 一键部署的方式&#xff0c;而 docker 镜像中的 redis 默认不是以 root 权限运行的&#xff0c;也就是说即使拿下这台 redis&#xff0c;我们也只能在对方服务器的本地内网中漫游&#xff0c;当然还是会有部分 redis 部署在服…

Tensorflow—第四讲网络八股扩展

本讲概述 一、自制数据集 我们用六万张数字图片自制训练集&#xff0c;一万张数字图片制作测试集 代码&#xff08;注释已经很清楚了&#xff0c;就不解释了&#xff09;&#xff1a; def generateds(path, txt):f open(txt, r) # 以只读形式打开txt文件contents f.readl…

【喜报】龙信助力上饶市公安局斩获全国刑侦部门数据侦查技战法大赛两项大奖

文章关键词&#xff1a;电子数据取证、手机取证、云取证、现场勘查、电子物证 8月2日&#xff0c;全国刑侦部门数据侦查技战法大赛在福建晋江市落下帷幕。来自全国各地的33支参赛队伍汇聚一堂&#xff0c;展现了全国公安刑侦部门数据侦查的新思路、新做法。 在这一高水平的竞技…

ant tree 数据的最优解

项目背景 : react ant ant 官网中目前只提供了 默认父子关联 或 checkStrictly(父子不关联)注意 : 不能盲目选择父子关联 , 虽然选中父 , 子也联动确实是需要的效果 , 但有一个bug 如下图 (当选中部分子 , 所有子被选中)解决方案 : 只能取消父子关联 , 自己去判断当前点击处…

C Primer Plus 第7章——第一篇

你该逆袭了 第7章:重点摘录 零、本章介绍一、if 语句二、if else 语句1、介绍 getchar( ) 和 putchar( )2、ctype.h 系列 的 字符函数(1)、isalnum( )(2)、isalpha( )(3)、isblank( )(4)、iscntrl( )(5)、isdigit( )(6)、isgraph( )(7)、islower( )(8)、isprint( )(9)、ispunct…

CV党福音:YOLOv8实现分类

YOLO作为目标检测领域的常青树&#xff0c;如今以及更新到了YOLOv10&#xff0c;并且还有YOLOX、YOLOS等变体&#xff0c;可以说该系列已经在目标检测领域占据了半壁江山&#xff0c;如今&#xff0c;YOLOv8的发行者ultralytics竟有一统江山之意&#xff0c;其在提出的框架中不…

基于Springboot+Vue3的简易教学管理系统

作品展示 基于SpringbootVue3的简易信息教学管理系统 第1章 系统设计 1.1 系统功能模块设计 该系统实现的功能模块包括&#xff1a; 教师端&#xff1a; 学生信息管理&#xff1a;添加、删除、修改以及查询学生信息 √课程信息管理&#xff1a;添加、删除、修改以及查…

智慧图书馆:构建高效视频智能管理方案,提升图书馆个性化服务

一、背景分析 随着信息技术的飞速发展&#xff0c;智慧图书馆作为现代公共文化服务的重要载体&#xff0c;正逐步从传统的纸质阅读空间向数字化、智能化方向转型。其中&#xff0c;视频智能管理方案作为智慧图书馆安全管理体系的重要组成部分&#xff0c;不仅能够有效提升图书…