0:在ubuntu下将Qt程序打包,发布成Debian包的过程

下面的步骤对于所有的打包程序都是通用的,所以完全可以写一个脚本,把这个包过程自动化,但是在自动化之前,我们需要弄清楚,一步一步打包是如何进行的,下面详细讲解。

1:建立好如下文件(夹)结构

└── mydeb  #目录 名字自取
    |
    ├── application #目录 名字确定
    │   ├── catchGG #目录 自己应用程序的名字
    │   │   ├── catchGG   #程序或文件 Qt生成的 或其它 可运行程序
    │   │   └── pycatchgg #程序或文件 Qt生成的 或其它 可运行程序
    │   └── lib
    │       ├── catchGG.desktop  #文件 需要复制到/usr/share/applications/目录,dash中可搜索
    │       ├── catchGG.png      #文件  应用程序在unity中显示的图标 需要复制到/usr/share/pixmaps/目录
    │     
    │     
    └── DEBIAN        #目录 名字确定
        ├── control   #文件 名字不可改
        ├── postinst  #脚本文件 名字不可改 ,运行sudo dpkg -i xx.deb命令时,会运行这个脚本 
        ├── postrm    #脚本文件 名字不可改 ,运行sudo dpkg -r app 命令时,会运行这个脚本 
  • 上面结构中: mydeb目录下面的两个目录 application 和 DEBIAN 名字不可改变的

  • mydeb/application/lib目录下面的 应用程序图标文件就不用说了,主要是.desktop文件 里面应该写些什么 内容

  • mydeb/DEBIAN/目录下面的三个文件的内容,是我们需要自己动手写的

2:.desktop文件的基本内容

#下面是一个基本的例子,按下面格式,改成自己需要的内容即可

[Desktop Entry]
Version=0.1   #应用程序版本
Name=catchGG  #应用程序名
Comment=Back up your data with one click  #应用程序描述
Exec=/usr/bin/catchGG                     #可运行应用程序最终的绝对路径
keywords=google,catchgg,catchGG           #在dasn串搜索时,可用的关键字
StartupNotify=true                        #这个不知道是什么意思
Terminal=false                            #运行时不需要打开终端
Type=Application                          #应用程序类型,在dash和分类中会有显示,还有其它的类型
Categories=Utility;Application;           #应用程序的分类,工具/应用程序
Hidden=false                              #是否隐藏(否),不知道是什么意思
Icon=/usr/share/pixmaps/catchGG.png       #应用程序图标名的绝对路径

3:control文件的基本内容

#下面是一个基本的例子,就不一个一个说了,都很容易
#有一点需要说一下,很多人都不知道Depends后面的依赖库名字是如何得到的,实际上非常容易
使用ldd命令,后面加你开发的Qt程序的名字,就可以得到你的Qt程序需要哪些动态链接库(配合grep qt命令使用)

Package:catchGG
Version:0.1
Section:utils
Priority:extra
Maintainer:Me You(QQ:397916230)
Depends:libqt5widgets5(>=5.0),libqt5gui5(>=5.0),libqt5core5a(>=5.0),libqt5x11extras5(>=5.0),libqt5x11extras5-dev(>=5.0)
Architecture:amd64
Description: The software is an opensource package from  397916230@qq.com

4:postinst脚本的基本内容

#在说脚本里面内容时,先告诉大家如何创建这个脚本,并使这个脚本具有个运行的权限
touch postinst &&  chmod 755 postinst  

#下面是这个脚本的基本内容----一个例子
#可以看到就是一个基本的shell脚本,做了如下事情
#1:告诉用户,安装过程中做了什么 echo命令显示 
#2:把应用程序图标文件和.desktop文件 mv到对应的系统目录中 (注意使用的是/applicaton/lib 这种路径格式)
#3:把可运行的Qt开发的程序,或其它二进行可运行程序(或其它库文件)复制到系统的path路径下
#4:设置一些基本的用户环境变量 


echo "Start to install"
mv -f /application/lib/catchGG.desktop /usr/share/applications/
mv -f /application/lib/catchGG.png /usr/share/pixmaps/
mv -f /application/catchGG/* /usr/bin/

echo "set QT_PLUGIN_PATH in file .profile"
echo "QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins" >> ~/.profile
echo "Install ok"

5:postrm脚本的基本内容

#在说脚本里面内容时,先告诉大家如何创建这个脚本,并使这个脚本具有个运行的权限
touch postrm &&  chmod 755 postrm

#下面是这个脚本的基本内容----一个例子
#把之间安装在系统中的文件都给删除,就搞定了,

echo "Start to remove"
rm -rf  /usr/share/applications/catchGG.desktop
rm -rf  /usr/share/pixmaps/catchGG.png 
rm -rf  /usr/bin/catchGG 
rm -rf  /usr/bin/pycatchgg
echo "Remove finished!
  

6:总结

  • 打包的过程照着上面的步骤,一步一步来,还是非常方便的

  • 打包命令也非常容易,如下:

     sudo dpkg -b    mydeb/      Qtapp_0.1_amd64.deb
  • 打包完成后,进行安装,删除测试

    # 安装 
    sudo dpkg -i  Qtapp_0.1_amd64.deb 
    sudo apt-get install -f #自动 安装程序需要的依赖库
    # 删除
    sudo dpkg -r app_name

猫哥
305 声望44 粉丝

热衷于研究各类互联网技术,热爱学习,热爱生活!