【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" ]; then
    cp /opt/test/test-my-demo.desktop "$DESKTOP_DIR"
else
    # 如果桌面目录不存在,尝试使用图形环境下的默认路径
    if [ -d "/home/$SUDO_USER/Desktop" ]; then
        cp /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"
    else
        echo "Desktop directory not found."
    fi
fi

exit 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.mfbz.cn/a/419067.html

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

相关文章

一封来自 DatenLord 关于GSoC 2024的挑战书

Google Summer of Code 是一项全球性的在线计划,致力于将新的contributor引入开源软件开发领域。GSoC 参与者在导师的指导下,与开源组织合作开展为期 12 周以上的编程项目。今年,达坦科技入选作为开源社区组织,携CNCF Sandbox项目…

比亚迪领航新能源时代:汉唐传承,品牌力量

比亚迪,以中国文化的深度与自信,为新能源汽车领域注入强大动力。汉唐车型,不仅承载着中国古代文明的辉煌,更以其创新技术和环保理念,终结油电之争,让燃油车再次破防。作为销量冠军,比亚迪品牌的…

中间件-Nginx加固(控制超时时间限制客户端下载速度并发连接数)

中间件-Nginx加固(控制超时时间&限制客户端下载速度&并发连接数) 1.1 Nginx 控制超时时间配置1.2 Nginx 限制客户端下载速度&并发连接数 💖The Begin💖点点关注,收藏不迷路💖 1.1 Nginx 控制超…

SD NAND:为车载显示器注入智能与安全的心脏

SD NAND 在车载显示器的应用 在车载显示器上,SD NAND(Secure Digital NAND)可以有多种应用,其中一些可能包括: 导航数据存储: SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…

自主研发!军事医学研究院团队提出 MIDAS,可用于单细胞多组学数据马赛克整合

众所周知,细胞是生命体的最小组成单位,人体内含有 40-60 万亿个细胞,构成了我们生长、发育的基础,在单细胞层面开展研究对于精确理解细胞的生长发育以及疾病的诊断与治疗至关重要。 近年来,单细胞测序技术异军突起&am…

请问如何用busctl命令列出会话总线?

在fedora39中启动ipmid时,如果不带输入参数,根据ipmid中的代码,此时注册的是系统总线,可以通过以下命令看到这条总线: $ busctl list | grep xyz xyz.openbmc_project.Ipmi.Host 199524 try2.out logic…

【菜鸟入门!】Matlab零基础快速入门教程

数学建模竞赛中,编程软件是必不可缺少的,比如大家都熟知的MATLAB多数同学们都会经常用到,今天给大家介绍一些MATLAB的基本元素,希望帮助大家更好的掌握编写基本的函数! 变量和数组 MATLAB 程序的基本数据单元是数组。一…

企业微信变更主体怎么改?

企业微信变更主体有什么作用?做过企业运营的小伙伴都知道,很多时候经常会遇到现有的企业需要注销,切换成新的企业进行经营的情况,但是原来企业申请的企业微信上面却积累了很多客户,肯定不能直接丢弃,所以这…

Linux 模拟实现shell【简单实现】

shell的模拟实现 我们知道shell是一个永不退出的程序,所以他应该是一个死循环,并且shell为了防止影响到自己,我们在命令行上输入的所有命令都是由shell的子进程来执行的,所以它应该要有创建子进程的相关函数,当然也会…

MySQL Strict Mode is not set for database connection ‘default‘

在使用 DJango 框架执行迁移文件的命令时,可以看到出现如下警告: (ll_env) D:\workspace\workspace-mengll\learning-log>python manage.py migrate System check identified some issues: WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set …

springboot232青年公寓服务平台

青年公寓服务平台的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,房屋信息因为其管理内容繁杂,管理数量繁…

android Service 与 activity 通信 并不断传数据

注:这只是个Demo 以下载为案例,实现开启下载,暂停下载,下载进度不断发送给activity class DownloadService : Service() {override fun onBind(intent: Intent?): IBinder? {return MyBinder()}inner class MyBinder : Binder…

IDEA中的Structure模块使用详解

IDEA中的Structure模块使用详解 类方法的展示 从左往右介绍: 1、最开头的 m 标识是表示为方法,如出现 f 标识则表示为属性; 2、m后面跟着的是方法或者属性的访问修饰符: #红色关闭的锁表示为private; #圆圈表示不带…

postman切换成黑色主题

postman安装以后默认是白色背景,如果想要切换成黑色的,大家可以按照下图箭头指示来操作。 1打开设置 2在Themes页面选择黑色主题

VR危险环境模拟介绍|VR虚拟现实设备

VR危险环境模拟是指利用虚拟现实技术来模拟和展现各种危险环境,以便训练人员应对紧急情况、提高安全意识和应急反应能力。这种模拟可以涉及到工业、医疗、紧急救援等多个领域,旨在帮助人们在真实环境中面对危险时能够做出正确的应对和决策。 VR危险环境…

LeetCode # 206. 反转链表

206. 反转链表 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例…

深度学习 精选笔记(2)自动求导与概率

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

国际数字影像产业园迎来多家企业,数字产业再添“生力军”!

龙年开年,树莓集团总部国际数字影像产业园迎来12家企业,为成都数字产业再添强军。初春2月,也为园区冲刺首季度“开门红”按下“快进键”。 一、正式落地 期待企业更大规模发展 紫荆国际教育集团成立四川东方紫荆教育咨询有限公司&#xff0c…

FCU2601嵌入式控制单元获得开普「电磁兼容检验证书」

近日,飞凌嵌入式专为锂电池储能行业设计的FCU2601嵌入式控制单元获得了开普电磁兼容检验证书,此次性能检验项目包括高频干扰检验、静电放电干扰检验、辐射电磁场干扰检验、快速瞬变脉冲群干扰检验、浪涌干扰检验、工频磁场干扰检验、阻尼振荡磁场干扰检验…

1688以图搜图API接口|c#爬虫-1688官网自动以图搜图

1688item_search_img 拍立淘 背景 在1688有个功能,就是上传图片,就可以找到类似的商品。如下 网址 :https://www.1688.com/ 这时候,我们可以使用程序来代替,大批量的完成图片上传功能。 实现思路 1、找到图片上传…
最新文章