Linux下Qt Installer Framework如何制作带依赖的安装包?含deb包方案
Qt CMake项目依赖打包方案解答
核心疑问解答
你不需要只能将*.so文件放入packages文件夹实现依赖自动安装,这只是其中一种「捆绑式分发」的实现方案,你也可以通过制作系统软件包(比如deb包)实现依赖自动拉取,两种方案的适用场景和操作方法如下:
方案1:捆绑依赖(放入so到packages目录)
- 适用场景:需要适配多版本Linux发行版、依赖为自定义修改版本、希望安装包可独立运行不依赖系统库的场景
- 操作方法:
- 使用
linuxdeployqt工具自动扫描你的Qt程序,收集所有依赖的Qt、OpenCV、Boost动态库文件,无需手动逐一查找 - 将收集到的所有
*.so文件和你的程序二进制、资源文件统一放入安装包的packages目录 - 在CMake配置中给你的程序二进制设置
rpath为$ORIGIN/lib,示例CMake代码:set_target_properties(your_target PROPERTIES INSTALL_RPATH "$ORIGIN/../lib") - 安装时将二进制文件安装到
/opt/你的应用名/bin,依赖so安装到/opt/你的应用名/lib即可,程序运行时会优先加载同包内的依赖库,不会和系统库冲突
- 使用
方案2:制作deb包实现依赖自动安装
该方案适合仅面向Debian/Ubuntu系列发行版分发的场景,不需要你自行打包依赖库,用户安装时系统会自动拉取官方源内的对应依赖。
前置要求
你的CMake项目已经完成安装配置,执行make install可正确将二进制、资源文件安装到对应系统路径。
具体操作步骤
- 项目根目录下创建
debian文件夹,编写以下必要配置文件:control:存放包元信息和依赖声明,示例内容:Package: your-app-name Version: 1.0.0 Section: utils Priority: optional Architecture: amd64 Maintainer: 你的名称 <你的邮箱> Depends: qt5-default, libopencv-dev, libboost-all-dev, ${shlibs:Depends}, ${misc:Depends} Description: 你的应用的简短说明 这里可以填写更长的应用描述,行首需要保留一个空格rules:编译打包规则,直接使用dh工具自动处理CMake项目,内容如下:
编写完成后执行#!/usr/bin/make -f %: dh $@ --buildsystem=cmakechmod +x debian/rules赋予可执行权限- 新增
compat文件,写入你的debhelper兼容版本,直接填写10即可适配绝大多数系统 - 执行
dch --create生成changelog文件,按照提示填写版本更新信息即可
- 项目根目录执行打包命令:
dpkg-buildpackage -us -uc -b - 命令执行完成后,父级目录会生成后缀为
.deb的安装包
- 安装使用方法:用户拿到deb包后执行
sudo dpkg -i your-app.deb && sudo apt install -f,系统会自动安装所有声明的依赖,无需额外操作
注意:该方案依赖官方源内的库版本,如果你的项目需要特定版本的依赖,需要在control文件的Depends字段指定版本号,或者选择方案1捆绑对应版本的so文件。
内容的提问来源于stack exchange,提问作者AlexSmth
相关产品推荐
相关产品推荐

