当前位置: 首页 > news >正文

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

文章目录

    • 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 全新在线客服系统源码(pc+h5+uniapp+公众号小程序+抖音)附搭建接入教程
  • 基于RK3568 Android11 移除长按电源按键弹窗的对话框中的 [关机] 和 [紧急呼救] 选项(详细分析)
  • Jenkins 部署Vue项目指引: Vue项目本地跨域代理 、解决ERR_UNSAFE_PORT
  • 轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)
  • 驾驭企业数字化转型的利器:《TOGAF®标准第10版》
  • qt自定义控件遇到的找不到头文件的问题
  • CentOS的根目录下,/bin 和 /sbin 用途和权限
  • Go语言fmt包中print相关方法
  • Android实时通信:WebSocket与WebRTC的应用与优化
  • 智能合约中重放攻击
  • 【SpringMVC】详细了解SpringMVC中WEB-INF 目录资源,视图解析器和静态资源放行的使用。
  • 从0开始安装一个本地K8s环境
  • sqlalchemy时间范围查询
  • WPF篇(13)-ScrollViewer控件+ScrollBar滚动条+Slider滑动条
  • Elasticsearch分片的主动迁移
  • 【知识碎片】第三方登录弹窗效果
  • CAP 一致性协议及应用解析
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • conda常用的命令
  • css的样式优先级
  • CSS相对定位
  • JavaScript-Array类型
  • JS 面试题总结
  • Linux gpio口使用方法
  • Making An Indicator With Pure CSS
  • Meteor的表单提交:Form
  • Python_OOP
  • python3 使用 asyncio 代替线程
  • Sublime text 3 3103 注册码
  • Vim Clutch | 面向脚踏板编程……
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 一些关于Rust在2019年的思考
  • 怎样选择前端框架
  • 1.Ext JS 建立web开发工程
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #控制台大学课堂点名问题_课堂随机点名
  • #数据结构 笔记三
  • ${factoryList }后面有空格不影响
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (第27天)Oracle 数据泵转换分区表
  • (回溯) LeetCode 78. 子集
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Linux整合apache和tomcat构建Web服务器
  • .CSS-hover 的解释
  • .md即markdown文件的基本常用编写语法
  • .NET 4.0中的泛型协变和反变
  • .net refrector
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net2005怎么读string形的xml,不是xml文件。
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...