【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.rhkb.cn/news/268963.html

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

相关文章

美女街拍3000张高清图

美女街拍3000张高清图,需要的可以直接下载 2.资源下载 ​途径一:点击以下链接直接下载 美女街拍3000张高清图 途径二:直接长按住以下图片识别进去下载即可

北京大学发布,将试错引入大模型代理学习!

引言:探索语言智能的新边界 在人工智能的发展历程中,语言智能始终是一个核心的研究领域。随着大语言模型(LLM)的兴起,我们对语言智能的理解和应用已经迈入了一个新的阶段。这些模型不仅能够理解和生成自然语言&#x…

UCSF DOCK 分子对接详细案例(01)- rigid, fixed anchor, flexible dock

欢迎浏览我的CSND博客! Blockbuater_drug …点击进入 文章目录 前言一、操作环境二、研究背景三、受体-配体结构文件准备3.1准备文件夹DOCK_workdir, 下载晶体结构3.1.1 来自湿实验的受体配体共晶结构:3.1.2 来自深度学习和语言模型推理预测的蛋白结构&a…

了解游戏中的数据同步

目录 数据同步 通过比较来看状态同步和帧同步 状态同步 帧同步 帧同步实现需要的条件 两者相比较 数据同步 在联机游戏中,我的操作和数据要同步给同一局游戏中其他所有玩家,其他玩家的操作和数据也会同步给我。这叫做数据同步,目前数据…

幻兽帕鲁(1.5.0)可视化管理工具(0.5.7 docker版)安装教程

文章目录 局域网帕鲁服务器部署教程帕鲁服务可视化工具安装配置服务器地址(可跳过)使用工具管理面板 1.5.0服务端RCON错误1.5.0服务端无法启动RCON端口 解决方法第一步:PalWorldSettings.ini配置第二步:修改PalServer.sh配置 局域…

Unity(第二十一部)动画的基础了解(感觉不了解其实也行)

1、动画组件老的是Animations 动画视频Play Automatically 是否自动播放Animate Physics 驱动方式,勾选后是物理驱动Culling Type 剔除方式 默认总是动画化就会一直执行下去,第二个是基于渲染播放(离开镜头后不执行), …

数仓模型设计方法论

在当今大数据时代,数据已经成为企业最重要的资产之一。而数据仓库作为企业数据管理和分析的核心基础设施,其设计方法论对于企业的数据治理和决策分析至关重要。本文将探索数仓模型设计的方法论,帮助读者更好地理解和应用数仓模型设计。 一、…

day06_菜单管理(查询菜单,添加菜单,添加子菜单,修改菜单,删除菜单,角色分配菜单,查询菜单,保存菜单,动态菜单)

文章目录 1 菜单管理1.1 表结构介绍1.2 查询菜单1.2.1 需求说明1.2.2 页面制作1.2.3 后端接口SysMenuSysMenuControllerSysMenuServiceMenuHelperSysMenuMapperSysMenuMapper.xml 1.2.4 前端对接sysMenu.jssysMenu.vue 1.3 添加菜单1.3.1 需求说明1.3.3 页面制作1.3.3 后端接口…

AI新工具(20240228) EMO - 阿里巴巴的表情驱动的音频到视频转换框架;DepthFlow;Globe Explorer等

EMO - 阿里巴巴的表情驱动的音频到视频转换框架 EMO(Emote Portrait Alive)是一个先进的表情驱动的音频到视频转换框架,可以通过音频(比如说话或唱歌的声音)和一张单独的参考图片,生成带有丰富面部表情和头…

【前端面试题5】利用 border 属性画一个三角形

举例1:利用 border 属性画一个三角形(小技巧) 完整代码如下: div{width: 0;height: 0;border: 50px solid transparent;border-top-color: red;border-bottom: none; }步骤如下: (1)当我们设…

es集群的详细搭建过程

目录 一、VM配置二、集群搭建三、集群配置 一、VM配置 VM的安装 VMware Workstation 15 Pro的安装与破解 VM新建虚拟机 VM新建虚拟机 二、集群搭建 打开新建好的服务器,node1,使用xshell远程连接 下载es:https://www.elastic.co/cn/down…

java中的set

Set Set集合概述和特点 不可以存储重复元素 没有索引,不能使用普通for循环遍历 哈希值 哈希值简介 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 如何获取哈希值 Object类中的public int hashCode():返回对象的哈希码值。 哈希值的特点 同一个…

xss.haozi.me:0x0B

<svg><script>(1)</script>

【王道操作系统】ch1计算机系统概述-06虚拟机

文章目录 【王道操作系统】ch1计算机系统概述-06虚拟机01传统计算机02虚拟机的基本概念&#xff08;1&#xff09;第一类虚拟机管理程序&#xff08;2&#xff09; 第二类虚拟机管理程序&#xff08;3&#xff09; 两类虚拟机管理程序的对比 【王道操作系统】ch1计算机系统概述…

面试经典150题 -- 回溯 (总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 17 . 电话号码的字母组合 1 . 先创建一个下标 与 对应字符串映射的数组&#xff0c;这里使用hash表进行映射也是可以的 &#xff1b; 2 . 对于回溯 &#xff0c;…

live555学习 - 环境准备

环境&#xff1a;Ubuntu 16.04.7 ffmpeg-6.1 1 代码下载 最新版本&#xff1a; http://www.live555.com/liveMedia/public/ 历史版本下载 https://download.videolan.org/pub/contrib/live555/ 选择版本live.2023.01.19.tar.gz ps&#xff1a;没有选择新版本是新版本在…

用堆排序解决topk问题

topk问题 从一群数中取出前k高或者低的数。&#xff08;就好比要做一个像csdn热度榜一样的东西&#xff09; 堆的基础知识&#xff1a;【python】堆排序-CSDN博客 堆排序解决思路 1.先用列表的k个元素构建一个小根堆&#xff0c;小根堆最上面的元素就是最小的元素 2.依次拿…

(学习日记)2024.03.01:UCOSIII第三节 + 函数指针 (持续更新文件结构)

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

算法:动态规划

文章目录 引子&#xff1a;凑零钱一、斐波那契数列模型引例&#xff1a;第 N 个泰波那契数动态规划步骤空间优化 例题1 三步问题例题2&#xff1a;使用最小花费爬楼梯★例题3&#xff1a;解码方法 ★ 二、路径问题例题4&#xff1a;不同路径例题5&#xff1a;下降路径最小和例题…

[Android View] 可绘制形状 (Shape Xml)

一切以官方文档为主 官方文档https://developer.android.com/guide/topics/resources/drawable-resource?hlzh-cn#Shape 什么是可绘制形状 可以理解为用xml文件来描述一个简单的Drawable图形&#xff0c;比如说以下这段xml就可以用来描述一个白色的圆形&#xff1a; <?…