Qt Creator 中使用 vcpkg

Qt Creator 中使用 vcpkg

Qt Creator 是一个跨平台的轻量级 IDE,做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强,但是由于和 Qt 集成的比较深,用来开发 Qt 程序还是很顺手的。

早期,开发 Qt 程序都是用 qmake 来写项目文件,但是随着 cmake 的成熟,Qt 开发也慢慢转向 cmake。在 Qt 5 的时代,cmake 来写 Qt 的项目文件还是有蛮多问题的。但是 Qt 6 基本上把这些问题都解决了。

vcpkg 是一个跨平台的 C/C++ 包管理器。解决了 C/C++ 生态中没有包管理器这个最大的痛点。

这篇博客就讲一讲 Qt Creator 中开发 C/C++ 程序时如何使用 vcpkg 的各种包的问题。

如果你还是用 qmake 来写项目文件,那么就直接添加库就行了,有没有 vcpkg 没有什么影响。 如果你已经在使用 cmake,那么厦门的内容会对你有用。

编程环境介绍

我的电脑是 win 11,装的编译器是 Visual Stdio 2022。Qt Creator 版本是 15.0.0。 Qt 版本是 6.8.1。

因此下面的描述都是在这个环境下测试的。

我们以 gsl 库为例,测试程序很简单,下面是代码。

#include <QCoreApplication>
#include <QDebug>
#include <gsl/gsl_sf_bessel.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << gsl_sf_bessel_I0(0.5);
    return a.exec();
}

整个程序的作用就是 计算 bessel 函数在 0.5 处的函数值。计算这个值只不过是为了确保使用到 gsl 这个库。

CMakeLists.txt 文件如下:

cmake_minimum_required(VERSION 3.16)

project(untitled5 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
find_package(GSL REQUIRED)

add_executable(untitled5
  main.cpp
)
target_link_libraries(untitled5 Qt${QT_VERSION_MAJOR}::Core GSL::gsl GSL::gslcblas)

include(GNUInstallDirs)
install(TARGETS untitled5
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

上面的代码很简单,但是如果 Qt Creator 不做任何设置的话会直接报错。报错的内容就是找不到 GSL 这个库。

在这里插入图片描述

方式一(传统用法)

先介绍一种最简单的方法。这个方法要求 vcpkg 里面已经编译好了这个库。所有的项目公用同一组编译好的库。

在 Qt Creator 里项目-> Inital Configuration 里面加入 CMAKE_TOOLCHAIN_FILE 的值。

在这里插入图片描述

这里需要特别注意的是 Debug 和 Release 都需要输入一遍。如果不知道 CMAKE_TOOLCHAIN_FILE 的值该写什么,可以执行 vcpkg integrate install。输出如下:

D:\vcpkg>vcpkg integrate install
Applied user-wide integration for this vcpkg root.
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake"

All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available.

这样设置完后直接在 Qt Creator 中执行 CMake 也还是不行的。需要先 Clear CMake Configuration ,然后再 CMake ,之后就可以正常编译运行了。

这种方式最简单,但是也有个致命的缺点。如果两个项目都使用到同一个库,但是这库编译时的配置参数不同,就不能用这种方法了。因为 vcpkg 没法同时存在一个库的两种不同配置。

方式二(vcpkg.json)

首先,要在 Qt Creator 中使能 vcpkg plugin。

在这里插入图片描述

这样就可以设置 vcpkg 的位置了。

在这里插入图片描述

之后就可以在项目中添加一个 vcpkg.json 文件了。

在这里插入图片描述

Qt Creator 有个 bug, 这样添加会报错:

在这里插入图片描述

没关系,我们自己把 vcpkg.json 文件加入到 CMakeLists.txt 中。

add_executable(untitled5
  main.cpp
  vcpkg.json
)

打开 vcpkg.json,可以添加其他的库。
在这里插入图片描述

这里又有个 bug,用这种方法添加的库没法保存到文件中。所以我们需要自己复制,更新到 vcpkg.json 文件中。

下面的文件引入了两个库,之后就开始自动的下载源码,开始编译,要等好久。

{
    "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
    "dependencies": [
        {"name":"gsl"},
        {"name":"opencv4", "features": ["jpeg"]}
    ],
    "name": "mypackage",
    "version-string": "0.0.1"
}

编译好的文件在build 目录中(vcpkg_installed)。大家可以自己去找找。

剩下的用法就差不多了。

这两种方法我觉得还是第一种更简单方便一些。所以,对于个人业余开发者来说,建议使用第一种方案。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux防火墙基础

一、Linux防火墙的状态机制 1.iptables是可以配置有状态的防火墙&#xff0c;其有状态的特点是能够指定并记住发送或者接收信息包所建立的连接状态&#xff0c;其一共有四种状态&#xff0c;分别为established invalid new related。 established:该信息包已建立连接&#x…

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中&#xff0c;智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具&#xff0c;更是一种推动数字化转型的重要力量。它通过高效的技术手段&#xff0c;将物业管理与用户居住体验紧密结合&#xff0c;无疑为社区带…

马铃薯叶子病害检测数据集VOC+YOLO格式1332张9类别

数据集中大约1000张是单个叶子图片 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1332 标注数量(xml文件个数)&#xff1a;1332 标注数…

【LeetCode: 81. 搜索旋转排序数组 II + 二分查找】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

解锁FPGA的故障免疫密码

我们身处“碳基智能”大步迈向“硅基智能”序曲中,前者更像是后者的引导程序,AI平民化时代,万物皆摩尔定律。 越快越好,几乎适用绝大多数场景。 在通往人工智能的征程中,算力无处不在,芯片作用无可替代。 十六年前,就已宣称自己是一家软件公司的英伟达,现已登顶全球…

Skyeye 云 VUE 版本 v3.15.6 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法&#xff0c;用来构造决策树。ID3算法起源于概念学习系统&#xff08;CLS&#xff09;&#xff0c;以信息熵的下降速度为选取测试属性的标准&#xff0c;即在每个节点选取还尚未被用来划分的具有最高信息增益的…

w187社区养老服务平台的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

如何让跨域文件管控简单又高效

在当今全球化和数字化的商业环境中&#xff0c;企业往往需要跨越不同的地理区域进行协作。这种多区域协作的一个关键挑战就是如何实现高效且安全的跨域文件传输。随着企业的规模不断扩大&#xff0c;并在全球范围内设立分支机构&#xff0c;跨域文件管控已经成为了一个必不可少…

HarmonyOS:ArkWeb进程

ArkWeb是多进程模型,分为应用进程、Web渲染进程、Web GPU进程、Web孵化进程和Foundation进程。 说明 Web内核没有明确的内存大小申请约束,理论上可以无限大,直到被资源管理释放。 ArkWeb进程模型图 应用进程中Web相关线程(应用唯一) 应用进程为主进程。包含网络线程、Vi…

Flutter开发环境配置

下载 Flutter SDK 下载地址&#xff1a;https://docs.flutter.cn/get-started/install M1/M2芯片选择带arm64字样的Flutter SDK。 解压 cd /Applications unzip ~/Downloads/flutter_macos_arm64_3.27.3-stable.zip执行 /Applications/flutter/bin/flutterManage your Flut…

129.求根节点到叶节点数字之和(遍历思想)

Problem: 129.求根节点到叶节点数字之和 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 直接利用二叉树的先序遍历&#xff0c;将遍历过程中的节点值先利用字符串拼接起来遇到根节点时再转为数字并累加起来&#xff0c;在归的过程中&#xf…

智能小区物业管理系统打造高效智能社区服务新生态

内容概要 随着城市化进程的不断加快&#xff0c;智能小区物业管理系统的出现&#xff0c;正逐步改变传统物业管理的模式&#xff0c;为社区带来了崭新的管理理念和服务方式。该系统不仅提升了物业管理效率&#xff0c;还加强了业主与物业之间的互动&#xff0c;为每位居民提供…

本地项目上传到码云

本地项目上传到码云 写在前面1. 系统安装git环境2. 创建仓库3. 开始上传3.1 创建新的远程仓库3.2 在项目的文件夹用git打开3.3 删除本地的 .git 目录3.4 初始化新的 Git 仓库3.5 添加远程仓库3.6 添加项目文件3.7 提交更改3.8 推送到远程仓库3.9 验证 4. 完整的步骤总结写在最后…

使用 DeepSeek-R1 与 AnythingLLM 搭建本地知识库

一、下载地址Download Ollama on macOS 官方网站&#xff1a;Ollama 官方模型库&#xff1a;library 二、模型库搜索 deepseek r1 deepseek-r1:1.5b 私有化部署deepseek&#xff0c;模型库搜索 deepseek r1 运行cmd复制命令&#xff1a;ollama run deepseek-r1:1.5b 私有化…

maven mysql jdk nvm node npm 环境安装

安装JDK 1.8 11 环境 maven环境安装 打开网站 下载 下载zip格式 解压 自己创建一个maven库 以后在idea 使用maven时候重新设置一下 这三个地方分别设置 这时候maven才算设置好 nvm 管理 npm nodejs nvm下载 安装 Releases coreybutler/nvm-windows GitHub 一键安装且若有…

【大模型专栏—基础篇】智能体入门

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解智能体入门&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; &#x1f514;文章同步存在格式问题&#xff0c;还请见谅&#xff01; 目…

深入理解linux中的文件(上)

1.前置知识&#xff1a; &#xff08;1&#xff09;文章 内容 属性 &#xff08;2&#xff09;访问文件之前&#xff0c;都必须打开它&#xff08;打开文件&#xff0c;等价于把文件加载到内存中&#xff09; 如果不打开文件&#xff0c;文件就在磁盘中 &#xff08;3&am…

算法题(55):用最少数量的箭引爆气球

审题&#xff1a; 本题需要我们找到最少需要的箭数&#xff0c;并返回 思路: 首先我们需要把本题描述的问题理解准确 &#xff08;1&#xff09;arrow从x轴任一点垂直射出 &#xff08;2&#xff09;一旦射出&#xff0c;无限前进 也就是说如果气球有公共区域&#xff08;交集&…

21款炫酷烟花代码

系列专栏 《Python趣味编程》《C/C趣味编程》《HTML趣味编程》《Java趣味编程》 写在前面 Python、C/C、HTML、Java等4种语言实现21款炫酷烟花的代码。 Python Python烟花① 完整代码&#xff1a;Python动漫烟花&#xff08;完整代码&#xff09; ​ Python烟花② 完整…