如何为Qt程序创建一个.deb软件包?

过去几天,我一直在尝试为一个带有Qt界面的程序创建一个deb软件包,但是没有成功。到目前为止,我已经完成了以下几个步骤:
  1. 创建了一个gpg密钥并在Launchpad上注册;
  2. ~/.bashrc中使用DEBEMAILDEBFULLNAME变量进行身份验证;
  3. 从GitHub上检出了源代码;
  4. 成功构建了该程序(它使用qmake生成一个Makefile),并确定了所有依赖项;
  5. 创建了一个包含Makefile、一个.desktop文件和一个.xpm图标的源文件夹。
  6. 从这个文件夹创建了一个名为packagename-version.tar.gz的tarball。
通过这些准备工作,我尝试按照两个不同的指南进行操作。
  • Ubuntu官方打包指南 - 它成功地总结了,但最终的.deb文件只包括doc文件夹。

  • xpressrazor提供的更详细的指南 - 在运行debuild时失败,并显示以下晦涩的消息:

    make: *** [build] Error 2 dpkg-buildpackage: error: debian/rules build gave error exit status 2 debuild: fatal error at line 1364: dpkg-buildpackage -rfakeroot -D -us -uc failed

这些以及其他指南无一例外地提供了简单的示例,其中要打包的程序由单个源文件组成(有时仅为bash脚本)。我怀疑它们对于具有精心设计的图形用户界面的真正程序来说过于简单。在这种情况下,从dh_make开始的确切步骤是什么?

更新 I: 我在 PasteBin 上发布了一个匿名版本的完整的 debuild 输出

更新 II: 现在有了DH_VERBOSE=1debuild 输出


1你能把完整的日志贴出来吗?看起来日志中有一些关于错误的详细信息。你提到的部分只是一个摘要。 - user.dz
请尝试取消注释 export DH_VERBOSE=1 或者在 debian/rules 文件中添加,然后再次尝试。构建在 dh_auto_configure 步骤失败,它确切地尝试运行 qmake -makefile -nocache ...。您也可以直接运行该命令以查看是否会出现错误。 - user.dz
显然,qmake只是打印帮助页面并退出而没有执行(在命令行中也是一样)。如果已经存在一个Makefile,为什么要再次运行qmake呢? - Luís de Sousa
1qmake 失败的原因很明显:在那个冗长的命令中没有给出 .pro 文件。 - Luís de Sousa
Qt已经在使用CMake,您可以尝试使用dhCMake代替cdbs吗? - Viet
1个回答

正如事情发生的那样, dh 无法以大多数指南和教程中介绍的传统方式来打包Qt程序。更具体地说,rules文件必须告知它必须使用哪些片段来包含在最终的Makefile中。
实现这一目标的一种方法是使用cdbs软件包: sudo apt-get install cdbs 然后,必须编辑rules文件以包含来自该软件包的片段:
#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/qmake.mk

这些应该是rules文件中唯一的内容,任何对dh的直接引用必须被删除或注释掉。
此时,debuild应该是可操作的,可以像这样运行: debuild -S