linux下打包qt程序

这两天在linux环境下打包一个qt程序,废话不多说,直接上过程。首先linux下打包qt程序需要两个集成工具包,分别是linuxdeployqt-5-x86_64.Appimage(现在已经是6了)和appimagetool-x86_64.Appimage。
源码地址linuxdeploy的qtrelease包地址appimagetools的release包地址

设置环境

下载好的linuxdeployqt-5-x86_64.Appimage是一个release版的执行文件,我们直接把它放到/usr/local/bin下面,并给他执行权限(当然也可以在bin下面给他们做一个连接或者直接把他们所在的文件夹设置成系统环境)
有些高版本的linux可能没办法直接用,可以参考爱分享的调子啊这篇文章自己编译使用。修改完/tools/linuxdeployqt/main.cpp之后如果cmake报错的话也可以直接用qt打开根目录下的.pro文件直接用qt生成

mv liuxdeployqt-5-x86_64.Appimage /usr/local/bin/linuxdeployqt //移动到/usr/local/bin下并改名为linuxdeployqt
cd /usr/local/bin  //进入bin目录下
chmod a+x linuxdeployqt		//增加执行权限

下载好的appimagetool-x86_64.Appimage也做相同操作

mv appimagetool-x86_64.Appimage /usr/local/bin/appimagetool //移动到/usr/local/bin下并改名为appimagetool
cd /usr/local/bin  //进入bin目录下
chmod a+x appimagetool		//增加执行权限

把要发布的程序打包

首先把qt构建的release包移动到一个任意文件夹(也可以不移动)如:我们现在生成的是myapp,我们把它移动到了/home目录下面,并新建一个文件夹名为mydir。

cd /home	//进入home目录,也可以不进入,但是如果不进入下面的myapp前面就要加上绝对路径
mkdir mydir
mv ./myapp /home/mydir/myapp  //把生成的myapp移动到mydir中(...表示myapp所在的文件夹)
linuxdeployqt myapp -appimage	//将依赖库打包到这里

在第二步的时候可能会出现比较多的问题,在这里我就不一一叙述了,有什么问题可以留言告诉我

生成之后的结构如下图

如何把整个linux系统打包成一个镜像 linux打包成img_如何把整个linux系统打包成一个镜像

配置文件的修改

在最终打包之前还有几个问题需要注意。
1.如果我们没有用到qml模块和自己封装的一些库或者非系统库的话我们只需要修改一个文件就可以了,就是文件夹中的default.desktop,在文件的最后一行加上Categories=Office;单词开头大写,最后记得加分号!!!详情可以参考linuxdeployqt官方说明 2.如果我们要用到qml模块,我们需要在上一步的时候就加上qml文件夹的位置linuxdeployqt myapp -appimage -qmldir=/home/mydir/这个文件夹一般情况下就是你代码的文件夹(包含.pro的文件夹)
3.如果我们要用到自己封装的库的话用到linuxdeployqt之前需要把我们的库文件先拷贝到我们需要打包的文件夹,如:cp …/…/mylib /home/mydir/。然后用linuxdeployqt打包完之后将库文件拷贝到新生成的lib文件夹内,然后再qt.conf文件中加上Libraries=lib就可以了

最终打包

最后我们在用appimagetool打包就行了

appimagetool /home/mydir/

大功告成,接下来会在/home文件夹下生成一个myapp-x86_64.Appimage,将它拷贝到其他linux系统下给它运行权限就可以直接运行了。