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

news2024/9/20 22:44:53

【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.coloradmin.cn/o/1480503.html

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

相关文章

vue3+vite 项目的创建

这里要提醒一下,如果我们要使用 vue3 的组合式api 的写法的话, 那么我们使用的 vue 版本不能低于 vue3.2 版本,不能低于 vue3.2 版本,不能低于 vue3.2 版本 vue2 已停止维护了, 现在全面拥抱vue3 之前用 vue-cli 创建…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:图片边框设置)

设置容器组件的图片边框样式。 说明: 从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 borderImage borderImage(value: BorderImageOption) 设置组件的图片边框。 卡片能力: 从API version 9开始…

2.2_4 调度算法的评价指标

文章目录 2.2_4 调度算法的评价指标(一)CPU利用率(二)系统吞吐量(三)周转时间(四)等待时间(五)响应时间 总结 2.2_4 调度算法的评价指标 注:要理解…

CentOs的yum报错: except KeyboardInterrupt, e:

1.报错 File “/bin/yum”, line 30 except KeyboardInterrupt, e: ^^^^^^^^^^^^^^^^^^^^ 2.原因:yum需要用python2编译,如果服务器安装的是python3.6并作为默认编译器的话,就会出现这个错误。 3.解决方法:whereis python 4.修改y…

【EI会议征稿通知】第三届新能源、储能与电力工程国际学术会议(NESP 2024)

第三届新能源、储能与电力工程国际学术会议(NESP 2024) 2024 3rd International Conference on New Energy, Energy Storage and Power Engineering (NESP 2024) 近几十年来,全球能源消耗迅速增加,因此寻找和开发性能优良的环保…

如何根据我的世界/Minecraft玩家数量选择合适的服务器配置,包括内存和CPU核心数的实际案例分析?

根据Minecraft玩家数量选择合适的服务器配置,首先需要考虑的是服务器的处理能力,这主要由CPU和内存决定。对于Minecraft服务器来说,CPU核心数直接影响到服务器能够同时处理的任务数量,而内存容量则决定了服务器能承载的人数。 对…

P1160 队列安排题解

题目 一个学校里老师要将班上N个同学排成一列,同学被编号为1∼N,他采取如下的方法: 先将1号同学安排进队列,这时队列中只有他一个人; 2∼N号同学依次入列,编号为i的同学入列方式为:老师指定编…

我写了个ImageWindow应用

文章目录 0 引言1 应用简介2 主要功能和特点2.1 多图像同/异步像素级对比2.2 支持多达30种图像格式2.3 高效率的图像处理性能 3 简明使用教程3.1 软件下载安装与更新3.1.1 软件下载与安装3.1.2 软件更新 3.2 多视窗添加并自动最优排列3.3 多样化图像导入方式3.4 自动切换显示模…

如何实现WordPress后台显示文章、分类目录、标签等的ID?

我们平时在使用WordPress的过程中,偶尔需要用到文章的ID,或分类目录ID,或标签ID,或媒体库ID,或评论ID,或用户ID等,但是WordPress后台默认是不显示它们的ID的。 今天boke112百科就跟大家分享如何…

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动: python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…

力扣1107 每日新用户统计

力扣SQL查询案例——在过去90天内,每个日期首次登录的用户数 目录 题目描述 解题思路 完整代码 题目描述 Traffic 表: ------------------------ | Column Name | Type | ------------------------ | user_id | int | | activity …

计算机二级MySQL-错题、知识点合集04

计算机二级MySQL 第四章 索引 主键约束,不允许为空也不允许重复。 NOT NULL非空约束属于自定义完整约束 PRIMARY KEY 属于实体完整性约束 FOREIGN KEY外键约束 外键与其引用的主键应分别属于不同的表,可以属于同一个关系;一个关系中可以定…

如何在Window系统部署BUG管理软件并结合内网穿透实现远程管理本地BUG

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

css5定位

css 一.定位1.概念(定位定位模式边位移)2.静态位移static(不常用)3.相对定位relative(不脱标)(占位置)4.绝对定位absolute(脱标)(不占位置&#x…

Unity(第十七部)Unity自带的角色控制器

组件Character Controller 中文角色控制器 using System.Collections; using System.Collections.Generic; using UnityEngine;public class player : MonoBehaviour {private CharacterController player;void Start(){player GetComponent<CharacterController>();}v…

leetcode刷题(javaScript)——栈相关场景题总结

在LeetCode刷题中&#xff0c;栈是一个非常有用的数据结构&#xff0c;可以解决许多问题&#xff0c;包括但不限于以下几类问题&#xff1a; 括号匹配问题&#xff1a;例如检查括号序列是否有效、计算表达式的值等。逆波兰表达式求值&#xff1a;使用栈来实现逆波兰表达式的计算…

Linux线程【1概念】

目录 前言&#xff1a; 正文&#xff1a; 1.什么是线程&#xff1f; 1.1基本概念 1.2线程理解 1.3进程与线程的关系 1.4线程使用 2.重谈地址空间 2.1页表的大小 2.2、内存与磁盘的交互 2.3深入页表 2.4小结 3.线程概念总结 3.1、再谈线程 3.2线程的优点 3.3…

MYSQL 解释器小记

解释器的结果通常通过上述表格展示&#xff1a; 1. select_type 表示查询的类型 simple: 表示简单的选择查询&#xff0c;没有子查询或连接操作 primary:表示主查询&#xff0c;通常是最外层的查询 subquery :表示子查询&#xff0c;在主查询中嵌套的查询 derived: 表示派…

pip降级在pycharm中

PyCharm依赖于"–build-dir"参数安装第三方库&#xff0c;但该参数在最新的23.0版pip中已删除 解决办法就是降级pip&#xff0c;PyCharm中选择File&#xff0c;找到编译器&#xff0c;点击pip&#xff0c;勾选对应版本即可 或者在cmd中执行运行python -m pip install…

android开发软件下载,2024年Android开发陷入饱和

谈起性能优化&#xff0c;我想问&#xff0c; 什么是性能优化&#xff1f;你的理解呢&#xff1f; **首先什么是性能&#xff1a;**在同一个手机里面&#xff0c;同样功能的app&#xff0c;哪个跑的快&#xff0c;哪个不卡&#xff0c;哪个就性能高。我们这篇文章就是解决那些…