使用CMake构建的Qt应用程序创建Debian软件包

我想为一个基于GUI的Qt5应用程序创建一个.deb安装包。大多数关于这个问题的链接都相当陈旧,所以我很好奇是否有更现代化的解决方案。过去我尝试了很多不同的方法。理想情况下,无论使用哪种打包工具,它都应该自动引入所需的库,并解决一些与Qt安装相关的麻烦问题。
我最终开发了一个自制的解决方案,使用一个小型的Qt程序来定位Qt库,然后使用一系列脚本来打包和解包,还可以自动生成像.desktop文件这样的东西。我担心我是在重复造轮子,而且可能已经存在满足大部分需求的解决方案(例如找到所有必需的动态库并将它们打包)。
我尝试过CQTdeployer,但它从未成功过。linuxqtdeploy对于构建Ubuntu 14.04有一个相当疯狂的要求,而我认为这对于我的目的来说是不必要的(例如,我控制目标系统)。我也尝试过CpackIFW,但虽然CpackIFW可以创建安装脚本和tarball,但它没有包含运行程序所需的必要库/平台。
我觉得我在这里可能遗漏了一些非常重要的东西,而且我不想在为Linux机器创建一个可工作、简单的打包系统时重复造轮子。非常感谢任何建议。谢谢!

鉴于该包装是在1990年代创建的并且至今仍在使用,很少有变化,因此文档实际上没有改变... 请参考https://packaging.ubuntu.com/html/(尽管还有其他指南,我也倾向于阅读Debian指南,因为通常由不同的人编写,但描述的是完全相同的过程..) FYI:我与Lubuntu有关,他们最近才转用LXQt/Qt5(迄今为止已发布5个版本),所以我们的文档并不算旧,但我们仍会经常引用像我刚刚做的这样的指南... - guiverc
有趣的是,在这么长时间里,竟然没有开发出一种更自动化地打包解决方案。假设我只为Linux平台进行开发(目前如此),并且使用Qt。我的开发系统与目标系统相匹配。为什么一个打包软件不能自动获取所需的文件以便自动分发,而不需要我每次手动指定依赖关系呢? - Alex Baum
别忘了,我们大多数人只在自己的系统上构建测试包,并且只处理源代码。我们上传源代码(补丁)和远程系统的软件包,通过持续集成实际上为我们构建和开始测试...我们自己的系统并不构建这些软件包(我们无法控制的基础设施会完成这个任务,这样我们就不会被指责隐藏恶意软件、篡改构建等行为)。 - guiverc
这是否意味着在大多数情况下,源代码之外的构建流程都不受你控制?我的经验是与较小的公司和嵌入式系统合作,在这些项目中我可以掌控从源代码到部署的一切。因此,最终产品完全在我指定的领域内。我能理解更广泛的问题是一个更普遍的问题,因此,我的特殊情况可能没有预先确定的解决方案。 - Alex Baum
@AlexBaum 欢迎来到Ask Ubuntu。你能分享一下 debian/rulesdebian/control 吗? - user.dz
1个回答

这对我来说没问题。
sudo snap install cqtdeployer
sudo snap connect cqtdeployer:process-control
sudo snap connect cqtdeployer:removable-media
sudo snap connect cqtdeployer:system-backup 

cqtdeployer -bin myApp -qmake myQtDir/qmake deb