【QT 5 +Linux下软件qt软件打包+qt生成软件创建可以安装压缩包+学习他人文章+第三篇:学习打包】

【QT 5 +Linux下软件qt软件打包+qt生成软件创建可以安装压缩包+学习他人文章+第三篇:学习打包】

  • 1、前言
  • 2、实验环境
  • 3、自我学习总结-本篇总结
      • (1)了解安装包的目录结构
      • (2)了解要编写文件与编写脚本
          • 1. control文件
          • 2. postinst文件
          • 3. postrm文件
          • 4.总结
      • (3)了解打包命令和安装命令:工具dpkg
          • 1. 主要功能
          • 2. 常用命令
          • 3. 注意事项
          • 4. 其它
  • 4、参考链接-感谢
  • 5、实验过程
      • 1、进入相关目录
      • 2、创建目录
      • 3、导入工程
      • 4、生成软件
      • 5、编写桌面文件
      • 6、编写三个文件
        • (1)进入目录
        • (2)生成文件
        • (3)编写内容
        • (4)给文件权限
      • 7、打包命令
      • 8、安装命令
      • 9、允许启动
      • 10、运行&验证
  • 6、工程文件与压缩包
  • 7、细节部分
      • (1)control的Package命名问题
      • (2)所遇到问题-权限问题
      • (3)“允许启动”
      • (4)三个文件是否有尾椎扩展名:无
      • (5)目录显示工具:tree
  • 8、总结

1、前言

qt软件生成后,需要使用linuxdeployqt工具生产,才能放到其他电脑上运行,但是我们发现其实无法想win那样,直接点击exe一样,直接运行,本篇为第三章,通过前两篇,我们已经基本知道,如何生成软件,如何做桌面快捷图标。感兴趣想要了解全程细节,可以从第一章开始看。

【QT 5 +Linux下软件生成+qt软件生成使用工具+学习他人文章+第一篇:使用linuxdeployqt软件生成】

【QT 5 +Linux下软件桌面快捷方式+qt生成软件创建桌面图标+学习他人文章+第二篇:编写桌面文件.desktop】

  • 第一篇:使用linuxdeployqt软件生成
  • 第二篇:桌面文件.desktop,文件编写与软件图标
  • 第三篇:打包生成安装的包(.deb)

2、实验环境

实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样,另外也发现其他小伙伴,也会问些问题,之前有人大致环境装的和我差不多,当时是win的环境,结果编译遇到问题,就跑过来问是不是环境不对,这还是要具体问题具体分析的,当时看了看,发现是其他问题,总的来说,环境还是挺重要的。
系统环境:
环境问题还是要注意下的,不同环境下可能还真的可能不一样。
在这里插入图片描述

QT软件版本环境: Linux qt环境

在这里插入图片描述

3、自我学习总结-本篇总结

(1)了解安装包的目录结构

如果没有做过相关linux打包,作为一个新手,看到目录结构,都少还是有些懵逼的,因为有使用win的习惯,就用win来打比方,我们安装一个软件的时候,是可以选择软件安装目录的。
对照linux,linux默认有安装目录,我们写好的软件一般都安装在/opt/下。
在这里插入图片描述
而这是怎么做到的呢,就是靠事先规划目录做到的,如下为参考文章的截图。
在这里插入图片描述
如下,其中这个目录做的非常好。

source
├── DEBIAN
│   └── control
│   └── postinst
│   └── postrm
├── opt└── Test├── Test└── xxx

如下用我本工程的目录进行说明。
在这里插入图片描述
总结来说:
(1)DEBIAN这里的脚本帮助我们软件安装时执行一些命令
(2)opt就是我们要装在其他机子上,在那个机子上opt的根目录下,具体/opt/目录下的目录结构。
在这里插入图片描述

(2)了解要编写文件与编写脚本

然后我们来了解下编写的文件,也就是DEBIAN下的是三个文件。
如下为解释说明三个文件:control,postinst 和 postrm
control
如下为在网上找相关解释,和自己理解做的以下总结。

1. control文件

control文件是位于软件包DEBIAN目录中的一个文本文件,包含了软件包的元数据和管理信息。这些信息帮助dpkg和高级包管理工具(如apt)理解软件包的属性,包括但不限于:

  • Package: 软件包的名称。
  • Version: 软件包的版本。
  • Architecture: 软件包支持的架构(如amd64、i386、all等)。
  • Depends: 软件包的依赖项,列出了运行该软件包所必需的其他软件包。
  • Description: 软件包的简短描述以及更详细的描述。

简单说:就是control文件要写一些配置信息,让打包工具识别,control文件是创建.deb包时是的必需的,没有它,软件包将无法正确安装。。

2. postinst文件

postinst是一个可执行脚本,它在软件包安装之后执行。这个脚本通常用于执行软件包安装后需要完成的配置任务,比如:

  • 更新系统配置文件。
  • 启用或重启服务。
  • 更新应用程序数据库或系统缓存。

简单说辅助做些自动化安装过程
postinst脚本为软件包提供了在标准安装过程之外,执行额外任务的能力。这块其实多少有些脱离qt了,有点看重使用shell能力,上述罗列项目是包括但不限于,还可以做很多其他事情。如果postinst脚本执行失败,软件包可能会被dpkg标记为一个错误状态。

3. postrm文件

postrm是在软件包被移除或卸载之后执行的脚本。这个脚本用于清理软件包安装过程中可能产生的残留文件和配置。常见的postrm脚本任务包括:

  • 删除由软件包创建的配置文件。
  • 清理缓存文件。
  • 更新或重建系统数据库,例如在软件包卸载后从菜单中删除条目。

简单说:就是用于卸载。postrm脚本确保软件包可以干净地被移除,避免留下无用的文件或配置。

4.总结

在Debian系统和基于Debian的Linux发行版中,创建.deb软件包涉及几个关键的控制文件,这些文件指导了软件包的安装、配置和卸载过程。其中,control、postinst和postrm是三个非常重要的文件。

control、postinst和postrm文件共同工作,确保软件包能够被正确地安装、配置和卸载。它们是创建.deb软件包时必须小心处理的关键组件,对于软件包的生命周期管理至关重要。正确编写和使用这些文件可以大大提高软件包的质量和用户体验。

自己在实际测试的过程中,多次遇到问题,就是某些文件内容写错了,或者不匹配,反复磨合,这块没有好的办法,多加练习

(3)了解打包命令和安装命令:工具dpkg

解释工具dpkg,也特意上网查了这个工具。

dpkg是Debian及基于Debian的Linux发行版(如Ubuntu)中的底层包管理系统工具。它用于安装、构建、删除和管理Debian软件包,但不解决包之间的依赖关系。这个工具是Debian包管理的核心,提供了直接操纵软件包的基本功能。对于解决依赖问题,通常会使用更高级的工具,如apt(Advanced Package Tool),它在dpkg之上提供了更友好的用户界面和自动依赖管理。

1. 主要功能
  • 安装、卸载和重新配置软件包:dpkg可以用来安装(.deb文件)、卸载已安装的软件包,或者重新配置那些已经安装但可能因配置问题需要重新设置的软件包。
  • 查询软件包信息:可以查询已安装软件包的信息,包括软件包的版本、描述、依赖关系等。
  • 列出已安装的软件包:dpkg提供了列出系统上已安装软件包的功能。
  • 检查软件包文件:可以检查.deb文件的内容,包括它将会安装哪些文件到系统上。
2. 常用命令
  1. 安装一个软件包: sudo dpkg -i package_file.deb
  2. 卸载一个软件包(保留配置文件): sudo dpkg -r package_name
  3. 完全删除一个软件包(包括配置文件): sudo dpkg -P package_name
  4. 列出所有已安装的软件包: dpkg -l
  5. 查询一个已安装软件包的信息: dpkg -s package_name
  6. 检查.deb文件的内容: dpkg -c package_file.deb
  7. 重新配置一个已安装的软件包: sudo dpkg-reconfigure package_name
3. 注意事项

虽然dpkg非常强大,但在处理依赖关系时可能不如apt等高级工具方便。例如,如果你尝试使用dpkg安装一个软件包,而这个包依赖于系统中未安装的其他包,dpkg将会报错并停止安装过程。在这种情况下,你需要手动安装所有缺失的依赖,或者使用apt-get install ./package_file.deb命令来自动处理依赖关系并完成安装。

4. 其它

dpkg是Debian系统包管理的基石,了解其基本用法对于管理Debian或基于Debian的系统是非常有用的。

4、参考链接-感谢

学习他人文章,至少有个大致规划,知道哪步骤该什么,如下,为自己参照的文章。
https://blog.csdn.net/zyhse/article/details/106381937

在这里插入图片描述

5、实验过程

整个实验还是细节比较多的,于是很多步骤简单重新说明下。

1、进入相关目录

如下,是qt自动生产的release版本(默认给人的软件,或者发布就是release的,一般不用debug的)的目录。我们将其中文件test1_hello文件直接放在之前准备好的 testSetup/source/opt/test下。文件下
在这里插入图片描述
如下图,为我自己整个目录结构,使用tree工具后,观看就非常方便了。
在这里插入图片描述
如下,将其中重要部分放在下面了。

└── testSetup├── output├── source│   ├── DEBIAN│   └── opt│       └── test

2、创建目录

那我们分别在testSetup,创建两个文件夹分别是 output 和 source的

mkdir output source

在这里插入图片描述
如上我这里已经有了,所以为了给大家示范,创建了其他文件夹。

在这里插入图片描述

然后进入source目录,创建另外两个目录

mkdir DEBIAN opt

解释:
(1)DEBIAN 文件夹就是用来装三个文件:control postinst postrm
(2)opt 前面也解释了,用来放软件本体,也就是安装在他人电脑下,会默认安装在 根目录/opt/xxx(xxx代表软件名字)的目录下。
在这里插入图片描述

3、导入工程

我们进入 opt 目录下,再建立一个目录,就是软件文件夹名字。
在这里插入图片描述

进入文件夹后,将之前qt生成的软件复制过来我们,要生成软件,并且改下名字

在这里插入图片描述

4、生成软件

再次目录我们使用命令,生产相关库。

linuxdeployqt test-my-demo -appimage

我这里已经生成,工程内容如下,猜测不同版本,可能文件会有差异
在这里插入图片描述

5、编写桌面文件

其中我们需要替换掉桌面文件和图标文件。
在这里插入图片描述
经过上述步骤 工程文件就准备好了,我们推到上层目录去编写三个文件。

6、编写三个文件

(1)进入目录

在这里插入图片描述

(2)生成文件

使用工具 vim 创建三个文件

vim control
vim postinst
vim postrm

在这里插入图片描述

(3)编写内容

1、文件control

Package: test-my-demo
Version: 0.1.0
Section: utils
Priority: optional
Architecture: all
Depends:
Installed-Size: 512
Maintainer: 123@163.com
Description: my test package

注意:自己通过测试,发现Package 这一栏中内容,不能有大小写,和下划线。
test-my-demo
在这里插入图片描述

2、文件postinst
这块在网上找到相关写法,可以识别有没有目录。

#!/bin/sh# 设置.desktop文件的权限
chmod 777 /opt/test/test-my-demo.desktop# 复制到应用程序启动器目录
cp /opt/test/test-my-demo.desktop /usr/share/applications/# 尝试复制到当前用户的桌面目录
# 注意:在安装包时,使用~可能不会指向预期的家目录,因此需要确定正确的家目录路径
DESKTOP_DIR="$HOME/Desktop"
if [ -d "$DESKTOP_DIR" ]; thencp /opt/test/test-my-demo.desktop "$DESKTOP_DIR"
else# 如果桌面目录不存在,尝试使用图形环境下的默认路径if [ -d "/home/$SUDO_USER/Desktop" ]; thencp /opt/test/test-my-demo.desktop "/home/$SUDO_USER/Desktop"elif [ -d "/root/Desktop" ]; then# 如果是以root用户运行,尝试复制到root的桌面目录cp /opt/test/test-my-demo.desktop "/root/Desktop"elseecho "Desktop directory not found."fi
fiexit 0

从自己实际情况来看,各种情况都有可能,有人可能连桌面都没有,喜欢用命令行的方式。
在这里插入图片描述

3、文件postrm

#!/bin/sh
rm -f "/usr/share/applications/test-my-demo.desktop"
rm -f "/root/Desktop/test-my-demo.desktop"

为了更好的让软件卸载,可以多加些内容,保证安装后卸载。这里只是按照参考文章示例。
在这里插入图片描述

(4)给文件权限

给文件权限,虽然提示是一个范围,但是需要给到范围最大:
如果特殊的情况,还可能需要加上sudo

chmod 0775 postinst postrm

在这里插入图片描述

7、打包命令

然后进入source目录下,再次目录下,使用命令。

sudo dpkg -b . ../output/test-my-demo_deb_v1.0.deb

这里最后包的名字可以随意起名字。
需要注意的是,命令里三个“.”,初次使用,建议复制,否则很容易看错,这里三个点,第一个“.”和第二个“.”是有间隔的,很容易看错

在这里插入图片描述

8、安装命令

然后我们放到另一个电脑,或者安装在自己电脑上也行。

sudo dpkg -i test-my-demo_deb_v1.0.deb

在这里插入图片描述

注意:我这里,其实安装过了,所以先要卸载下,使用如下命令

sudo dpkg -r test-my-demo 

在这里插入图片描述

9、允许启动

如下图,桌面上会有这样的一个文件,右键>>>“允许启动”
在这里插入图片描述
就变成了了图标

10、运行&验证

在本机上,验证就完成了。
在这里插入图片描述
在另一台电脑上验证:
在这里插入图片描述

6、工程文件与压缩包

如下为工程压缩包,觉得有价值可以拿走。
https://download.csdn.net/download/qq_22146161/88890139

7、细节部分

(1)control的Package命名问题

如下,自己看是在这个文件里,命名App名字的时候,会提示,不能压缩包。
在这里插入图片描述
开始以为是命名deb包不对,后来才知道是control文件里命名,不能有大写字母和“_”(下划线) 。
在这里插入图片描述

(2)所遇到问题-权限问题

开始按照提示,并给两个文件postints 和 postrm,特定权限,可是就是提示权限不够,如下图,后来只能给 0755的权限
在这里插入图片描述

(3)“允许启动”

这个说过,电脑系统桌面,配置有关系,自己测试,好像不是都需要允许启动,有需要的,有不需要,至少我这个电脑需要。另外好像,有些电脑,就没有这个“允许启动(不一定是中文)”选项。

注意这里不确定是解决方案:之后会写写一篇关于直接点击脚本文件就能运行的方式,好像安装那个也能解决部分问题。

(4)三个文件是否有尾椎扩展名:无

开始自己有些疑问,其中一个疑问就是既然“control”,“postinst”和“postrm”是装载脚本命令,就是有些命令比如“cp”什么的,那么大家说到脚本的时候,是文件本身就叫“postinst”,还是说省略了后缀,文件全名叫“postinst.sh”.
在这里插入图片描述
后来上网查了下,这三个文件没有任何拓展名,就叫做“control”,“postinst”和“postrm”。
如下图
在这里插入图片描述

(5)目录显示工具:tree

开始觉得参考文章里目录结构做的太好了,后来想到:是否有某种工具可以显示呢,一查还真有,就是tree
在Linux中,要显示一个文件夹下的目录结构,可以使用tree命令。tree命令以树状图的方式展示目录的结构,包括目录中的所有文件和子目录。如果系统中未安装tree命令,可以通过包管理器安装。

1.例如,在基于Debian的系统中,可以使用以下命令安装:

sudo apt-get install tree

2.安装完成后,你可以简单地运行以下命令来显示当前目录下的结构:

tree

3.如果想显示某个特定目录下的结构,可以将该目录作为tree命令的参数,如下所示:

tree /path/to/directory

4.此外,tree命令还有一些有用的选项,例如:

  • -L level:限制目录树显示到特定的层数。
  • -a:显示所有文件和目录,包括以.开始的隐藏文件。
  • -d:仅显示目录。
  • -f:显示每个文件的完整路径。

8、总结

终于完成 qt 工具 linuxdeployqt 工具学习,整个linux打包就可以使用了。

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

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

相关文章

NVMFS5113PLWFT1G汽车级功率MOSFET 60V 10A/64A满足AEC-Q101标准

AEC-Q101认证标准详细解读: AEC-Q101是一种汽车电子元件可靠性标准,由汽车电子委员会(Automotive Electronics Council,简称AEC)制定。该标准旨在确保在汽车环境中使用的电子元件具有足够的可靠性和耐久性。 AEC-Q10…

探索JavaScript中的构造函数,巩固你的JavaScript基础

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

element-ui附件上传及在线查看详细总结,后续赋源码

一、附件上传 1、在element-ui上面复制相应代码 a、accept"image/*,.pdf,.docx,.xlsx,.doc,.xls" 是规定上传文件的类型,若是不限制,可以直接将accept‘all即可; b、:action"action" 这个属性就是你的上传附件的地址&am…

如何解决局域网tcp延迟高来进行安全快速内外网传输呢?

在当今企业运营中,数据的快速流通变得至关重要,但局域网内的TCP延迟问题却成为了数据传输的障碍。本文旨在分析局域网TCP延迟的成因,并探讨几种企业数据传输的常见模式,以及如何为企业选择合适的传输策略,以确保数据在…

java之servlet

动态的web资源开发技术 不同的用户,或者携带不同的参数,访问服务器 服务器添加判断层,实现访问不同的web资源

【iOS ARKit】协作 Session 实例

协作 Session 使用注意事项 协作 Session 是在 ARWorldMap 基础上发展起来的技术,ARWorldMap 包含了一系列的地标、ARAnchor 及在观察这些地标和 ARAnchor 时摄像机的视场(View)。如果用户在某一个位置新创建了一个 ARAnchor,这时…

禅道安装与使用

文章目录 1.下载2.安装 1.下载 进入禅道官网下载 2.安装 登录后

uniapp生成app包引导用户开启通知权限和热更新

uniapp生成app包引导用户开启通知权限和热更新 引导用户开启通知权限 export function setPermissions() {// #ifdef APP-PLUS if (plus.os.name Android) {var main plus.android.runtimeMainActivity();var pkName main.getPackageName();var uid main.getApplicationI…

【免费】两阶段鲁棒优化matlab实现——CCG和benders

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序采用matlab复现经典论文《Solving two-stage robust optimization problems using a column-and-constraint generation method》算例,实现了C&CG和benders算法两部分内容,通过…

1.3 vue ui框架-element-ui框架

1 前言 ElementUI是一套基于VUE2.0的桌面端组件库,ElementUI提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。 ElementUI官网 https://element.eleme.io 2 安装 运行命令 cnpm i element-ui -S -S表示只在该项目下安装,不是全局安…

基于YOLOv8深度学习的复杂场景下船舶目标检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

GL绘制自定义线条4_使用OpenGL ES实现钢笔效果

在以前的文章里http://t.csdnimg.cn/TgCtl,我简述了如何使用OpenGL ES实现光滑的粗线条的绘制效果,在闲暇时间我把它再进一步进化,实现了端点长度按照压感大小实现伸缩的逻辑,从而实现了如下的笔锋效果: 书写过程中的效…

包管理工具之npm也慌了?

起因 因为npm的种种问题,我很早就换成了pnpm和yarn(但是其实npm也在使用),已经很久没有关注npm的功能更新了。最近无意间进入Node18版本的安装目录,发现其除了常规的node,npm等默认安装了一个新的包corepack,这个就是今天我要分享的东西了。 注: 我因为18版本的node上…

【STM32】STM32学习笔记-FLASH闪存(48)

00. 目录 文章目录 00. 目录01. FLASH简介02. 闪存模块组织03. FLASH基本结构04. FLASH解锁05. 使用指针访问存储器06. 程序存储器编程07. 选项字节08. 选项字节编程09. 选项字节擦除10. 器件电子签名11. 附录 01. FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选…

灰度负载均衡和普通负载均衡有什么区别

灰度负载均衡(Gray Load Balancing)与普通负载均衡的主要区别在于它们服务发布和流量管理的方式。 灰度负载均衡 目的:主要用于灰度发布,即逐步向用户发布新版本的服务,以减少新版本可能带来的风险。工作方式&#x…

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消…

Google发布Genie硬杠Sora:通过大量无监督视频训练最终生成可交互虚拟世界

前言 Sora 问世才不到两个星期,谷歌的世界模型也来了,能力看似更强大(嗯,看似):它生成的虚拟世界自主可控 第一部分 首个基础世界模型Genie 1.1 Genie是什么 Genie是第一个以无监督方式从未标记的互联网视频中训练的生成式交互…

vue-electron 项目创建记录及注意事项

vue-electron 项目创建记录及注意事项 1、使用vue ui或者命令行创建vue项目 2、添加electron插件 3、安装element-plus: npm install --save element-plus 4、修改配置文件如下图: vue.config.js增加配置: pluginOptions:{ electronOutput: { contextIsolation…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(6.详解Set和ZSet数据结构)

本文是深入理解 Redis 常用数据类型源码及底层实现系列的第6篇~前5篇可移步( ̄∇ ̄)/ 【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底…

【Redis:事务】

1 🍑事务概念🍑 Redis 的事务和 MySQL 的事务概念上是类似的,都是把⼀系列操作绑定成⼀组,让这⼀组能够批量执⾏。 但是注意体会 Redis 的事务和 MySQL 事务的区别: 弱化的原⼦性: redis 没有 “回滚机制”. 只能做到这些操作 “…