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

【QT】项目打包与发布安装

文章目录

    • 一、引言
    • 二、前期准备
    • 三、打包QT项目
      • 3.1 编译release版
      • 3.2 相关依赖打包
      • 3.3 打包发布
      • 3.4 安装
    • 四、打包普通项目
    • 五、结束语

一、引言

当Qt程序编写完成通过IDE编译就可以得到对应的可执行程序,这个可执行程序在本地运行是完全没有问题的。因为在本地有Qt环境,程序运行过程中可以加载到相关的动态库。但是如果我们想把这个Qt程序给到其他人使用可能就会出问题了,原因如下:

  • 对方本地根本没有Qt开发环境
  • 对方本地有Qt开发环境,但是和我们使用的版本不一致
  • 对方本地有Qt开发环境并且使用的版本与我们一致,但是没有配置环境变量

诸如此类的情况都会导致我们的程序如果直接发送给对方,对方拿到可执行程序之后无法运行。下面来给大家讲一下解决方案。

本文讨论了Windows下QT项目如何打包成单体式exe程序,并支持一键安装与部署。

二、前期准备

  • 操作系统:win10
  • 本地已安装QT以及相关开发环境
  • 已开发好的QT项目且本地运行无异常
  • 安装打包软件:innosetup(一路next即可)。

三、打包QT项目

3.1 编译release版

如果要发布程序,需要切换为Release版本(Debug为调试版本),编译器会对生成的Release版可执行程序会进行优化,生成的可执行程序会更小。
这里以QtCreator为例,截图如下:
在这里插入图片描述
编译好之后,去相关的文件夹,把生成的exe程序复制到一个新的空文件夹下:
在这里插入图片描述
比如我把它复制到了test目录下。

3.2 相关依赖打包

先找到你的QT环境下的bin目录,一般情况下这个目录会被设置进环境变量中,也就是你编译套件所在的目录。
找不到的看下图:
在这里插入图片描述
在这里插入图片描述
进入这个bin目录,可以将这个路径设置进环境变量。

关于环境变量,说白了,它就是一些优先级比较高的路径。操作系统运行程序时会先从这些路径中找,如果没有再从其他地方找,找不到就报错。
比如你有个程序叫a.exe,它在C:\ffmpeg-7.1.1-essentials_build\路径下。如果你想在任何地方打开cmd运行这个程序,你就必须要写全路径:C:\ffmpeg-7.1.1-essentials_build\a.exe才能运行,否则跑不起来,但是如果你将他的路径C:\ffmpeg-7.1.1-essentials_build\写进环境变量里,那么你就可以直接打开cmd输入a.exe运行,而不必去写路径。

这个目录下有个qt自带的程序叫 windeployqt.exe ,功能是收集程序的相关依赖。找到它,记住它的路径。

回到之前你放exe程序的那个目录,我上面放的是test目录,按住shift并右键打开powershell终端或者cmd,运行windeployqt.exe程序,后跟你的exe程序:

windeployqt.exe yours.exe

以我举例:

D:\Qt\6.9.0\mingw_64\bin\windeployqt.exe .\spark_player.exe

这样windeployqt.exe会收集你的exe程序的相关依赖并复制到这个文件夹下,运行完之后你就会发现这个目录下多了很多文件。此时,点击打开你的exe程序开能不能运行,能运行就行。不能运行的话会提示你缺的文件,找到这些文件,复制进这个exe程序的目录。(everything全局搜)

最终目标是:你在这个阶段要保证单击你的exe程序他能正常运行。

3.3 打包发布

打开innosetup。
创建项目
在这里插入图片描述

在这里插入图片描述
填写信息
在这里插入图片描述
跟你平时安装的程序一样
在这里插入图片描述

在这里插入图片描述

由于可执行程序关系的动态库有很多,所以可以直接添加动态库的目录,选中对应的目录之后,如果里边还有子目录会弹出如下对话框,选择是即可,需要包含这些子目录。
在这里插入图片描述
给可执行程序关联本地的某种格式的磁盘文件(比如记事本程序会自动关联本地的 .txt 文件),对于我的可执行程序来说无需关联,因此没有做任何设置,直接下一步
在这里插入图片描述
在这里插入图片描述
安装模式:
在这里插入图片描述
英文:
在这里插入图片描述
留意一下这里的路径,等会需要去这个目录找生成的单体exe:
在这里插入图片描述
在这里插入图片描述
这之后会提示你创建一个脚本,下回打包你就可以选中执行脚本重复以上步骤,而不需要这样一步一步点击安装了。
在这里插入图片描述
在这里插入图片描述

3.4 安装

找到你生成的exe文件,双击安装即可。

第二次你就可以使用最后生成的脚本进行打包了,前几次可能不熟,多来几次就玩透了。

四、打包普通项目

仔细回顾一下上述过程,其实所谓的打包就是先保证这个程序在你本地可用,然后借助第三方软件打包成一个单体式应用程序。同理,打包C++写的普通项目也是一样的流程,这里不再赘述。

这里引申出一个问题:普通项目没有图标有点难看?
这个问题qt里你可以借助于pro文件帮你生成带图标的程序,同理借助于cmake也可以。
具体做法就是写一个.rc文件,文件里指定相应的图标文件路径
例如:app.rc里写上这一句:
IDI_ICON1 ICON "train.ico"
然后cmake编译的时候编译它:
add_executable(${PROJECT_NAME} ${SRC_LIST} app.rc)
之后编译生成的文件就有图标了

五、结束语

enjoy it !
好用的话别忘三连打卡~

http://www.xdnf.cn/news/364231.html

相关文章:

  • 图灵爬虫练习平台第七题千山鸟飞绝js逆向
  • 宠物医院预约|基于Java+vue的宠物医院预约平台系统(源码+数据库+文档)
  • windows celery OSError: [WinError 6] 句柄无效
  • ELF-如何学习
  • C++(1):整数常量
  • Mysql存储引擎
  • 期刊论文写作注意点
  • LVGL源码学习之渲染、更新过程(1)---标记和激活
  • 【C/C++】为什么要noexcept
  • 机器学习第二讲:对比传统编程:解决复杂规则场景
  • 机器学习实操 第二部分 第19章 大规模训练和部署 TensorFlow 模型
  • RPG11.创建玩家Ability类
  • 基于CNN的猫狗图像分类系统
  • 推荐系统(二十五):基于阿里DIN(Deep Interest Network)的CTR模型实现
  • SpringCloud的作用
  • Java高频基础面试题
  • EMC|AC/DC转换器ESD静电防护
  • The 2024 ICPC Kunming Invitational Contest G. Be Positive
  • 【Python-Day 11】列表入门:Python 中最灵活的数据容器 (创建、索引、切片)
  • 【Spring】手动创建Spring|Boot项目
  • 【Golang】gin框架动态更新路由
  • C++--NULL和nullptr的区别
  • ATH12K 驱动框架
  • ch09 题目参考思路
  • 不黑文化艺术学社首席艺术家孙溟㠭浅析“雪渔派”
  • AI赋能智能客服革新:R²AIN SUITE 如何破解医疗行业服务难题?
  • 哈希表扩容怎么处理新插入的值?Swift 是怎么做的?
  • 力扣-19.删除链表的倒数第N个结点
  • Nacos源码—Nacos配置中心实现分析
  • Mysql数据库进阶