1. 如何用CMake构建deb包

CMake支持构建deb,rpm等形式的软件包,根据下面的cmakelist,就会生成一个简单的debian/control文件,如下。

SET(CPACK_GENERATOR "DEB")
SET(CPACK_PACKAGE_NAME "org.xzg.xweather")
SET(CPACK_PACKAGE_CONTACT "blueshaw@163.com")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "blueshaw")
SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "A simple weather app")
SET(CPACK_DEBIAN_PACKAGE_VERSION ${PACKAGE_VERSION})
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "Optional")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5widgets5, libqt5network5, libqt5gui5")
INCLUDE(CPack)

debian/control文件

Architecture: amd64
Depends: libqt5core5a, libqt5widgets5, libqt5network5, libqt5gui5
Description: A simple weather app
Maintainer: Xiao Zhiguo
Package: org.xzg.xweather
Priority: Optional
Section: devel
Version: 1.0.1
Installed-Size: 21254

如果你不赋值CPACK_DEBIAN_PACKAGE_DEPENDS这个变量,则在debian/control文件中,没有Depends这一行,虽然在你自己的机器上不影响打包构建。但是将deb包提供给他人安装后,可能无法运行。如果添加这一行,则可以在安装时就检查依赖是否满足。

2. 确定Depends依赖包

使用ldd查看可执行软件链接的动态库。

$ ldd xweather linux-vdso.so.1 (0x00007ffdde71d000)libQt5Widgets.so.5 => /lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007fb48ad0a000)libQt5Gui.so.5 => /lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007fb48a77f000)libQt5Network.so.5 => /lib/x86_64-linux-gnu/libQt5Network.so.5 (0x00007fb48a5de000)libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007fb48a0e3000)libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb489f5f000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb489ddc000)libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb489dc0000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb489bff000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb489bde000)libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007fb489b4a000)libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fb489b11000)libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fb489a0e000)libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb4899ef000)libicui18n.so.63 => /lib/x86_64-linux-gnu/libicui18n.so.63 (0x00007fb489721000)libicuuc.so.63 => /lib/x86_64-linux-gnu/libicuuc.so.63 (0x00007fb489556000)libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007fb4894db000)libdouble-conversion.so.1 => /lib/x86_64-linux-gnu/libdouble-conversion.so.1 (0x00007fb4894c4000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb4894bf000)libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fb48939e000)/lib64/ld-linux-x86-64.so.2 (0x00007fb48b389000)libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fb48936a000)libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fb4892ad000)libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fb4891f1000)libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fb4891c4000)libicudata.so.63 => /lib/x86_64-linux-gnu/libicudata.so.63 (0x00007fb4877d2000)libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fb48775e000)libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fb48761d000)libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fb487608000)libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fb4875de000)libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fb4875d7000)libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fb4875cf000)libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fb4875b5000)librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb4875ab000)

如果用Qt开发的应用,我们可以只关注Qt的库,使用grep过滤下。

$ ldd xweather | grep [Qq]tlibQt5Widgets.so.5 => /lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007ff241739000)                libQt5Gui.so.5 => /lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007ff2411ae000)                        libQt5Network.so.5 => /lib/x86_64-linux-gnu/libQt5Network.so.5 (0x00007ff24100d000)                libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007ff240b12000)

得到4个Qt的动态库,但是到这一步还没有结束,现在我们需要确定这些动态库都在哪些软件包里。

$ dpkg -S libQt5Widgets.so.5
libqt5widgets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.11
libqt5widgets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
libqt5widgets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.11.3

通过上面的步骤,我们就可以得到libQt5Widgets.so.5这个动态库在libqt5widgets5这个包中。同样的步骤,依次获取其他3个软件包名。

libqt5widgets5
libqt5gui5
libqt5network5
libqt5core5a

将这些软件包名赋值给CPACK_DEBIAN_PACKAGE_DEPENDS即可。

SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5widgets5, libqt5network5, libqt5gui5")
3 确定Build-Depends

后续的步骤是获取debian/control中Build-Depends的方法,记录下来,以备后用。

sudo apt-get install devscripts

The devscripts package provides a collection of scripts which may be of use to Debian developers and others wishing to build Debian packages.

要找出编译你的软件所需的软件包可以使用这个命令

$ dpkg-depcheck -d your_build_exec_binarywarning: files in /usr/local or /var/local used:
/usr/local/share/fonts/.uuid
The following files did not appear to belong to any package:
/usr/share/fonts/cMap/.uuid
/usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13
/usr/share/fonts/deepin-font-install/.uuid
/usr/lib/x86_64-linux-gnu/libmount.so.1.1.0
/usr/lib/x86_64-linux-gnu/libgcc_s.so.1
/usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.4
/usr/share/poppler/cMap/Adobe-Japan1/.uuid
/usr/share/fonts/truetype/unifont/.uuid
/usr/lib/x86_64-linux-gnu/libpthread-2.28.so
/usr/share/poppler/cMap/Adobe-Korea1/.uuid
/usr/lib/x86_64-linux-gnu/libsystemd.so.0.25.0
/usr/share/fonts/truetype/deepin/.uuid
/usr/lib/x86_64-linux-gnu/libnss_dns-2.28.so
/usr/share/fonts/X11/encodings/.uuid
/usr/share/fonts/X11/encodings/large/.uuid
/usr/share/fonts/cmap/.uuid
/usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
/usr/share/fonts/truetype/.uuid
/usr/share/fonts/truetype/lohit-devanagari/.uuid
/usr/lib/x86_64-linux-gnu/libcap.so.2.25
/usr/lib/x86_64-linux-gnu/libdl-2.28.so
/usr/share/fonts/X11/100dpi/.uuid
/usr/share/fonts/.uuid
/usr/lib/x86_64-linux-gnu/libz.so.1.2.11
/usr/lib/x86_64-linux-gnu/libc-2.28.so
/usr/lib/x86_64-linux-gnu/libgpg-error.so.0.26.1
/usr/share/fonts/X11/Type1/.uuid
/usr/lib/x86_64-linux-gnu/libresolv-2.28.so
/usr/share/fonts/truetype/ancient-scripts/.uuid
/usr/lib/x86_64-linux-gnu/libtinfo.so.6.1
/etc/resolv.conf
/usr/share/poppler/cMap/Adobe-GB1/.uuid
/usr/share/fonts/X11/75dpi/.uuid
/usr/share/fonts/truetype/dejavu/.uuid
/usr/share/fonts/X11/.uuid
/usr/share/fonts/X11/util/.uuid
/usr/share/mime/mime.cache
/usr/share/fonts/opentype/.uuid
/usr/share/poppler/cMap/Adobe-Japan2/.uuid
/usr/lib/x86_64-linux-gnu/libm-2.28.so
/usr/lib/x86_64-linux-gnu/libpcre.so.3.13.3
/etc/hosts
/usr/lib/locale/locale-archive
/etc/passwd
/usr/share/mime/image/png.xml
/usr/share/fonts/wps-office/.uuid
/usr/lib/x86_64-linux-gnu/libnss_files-2.28.so
/etc/nsswitch.conf
/usr/lib/x86_64-linux-gnu/libblkid.so.1.1.0
/usr/lib/x86_64-linux-gnu/libexpat.so.1.6.8
/usr/share/fonts/truetype/noto/.uuid
/usr/share/poppler/cMap/Adobe-CNS1/.uuid
/usr/lib/x86_64-linux-gnu/librt-2.28.so
/usr/lib/x86_64-linux-gnu/libwrap.so.0.7.6
/usr/share/fonts/opentype/noto/.uuid
/usr/share/fonts/X11/misc/.uuid
/usr/lib/x86_64-linux-gnu/libnsl-2.28.so
/usr/share/mime/types
/usr/lib/x86_64-linux-gnu/liblzma.so.5.2.4
/usr/lib/x86_64-linux-gnu/libselinux.so.1
Packages needed:fonts-lohit-devadeepin-default-settingslibqt5xdgiconloader3:amd64libxcb-keysyms1:amd64libdouble-conversion1:amd64libvorbis0a:amd64libjpeg62-turbo:amd64libmtdev1:amd64libx11-6:amd64libqt5widgets5:amd64libglvnd0:amd64fcitx-frontend-qt5:amd64libxcb-dri3-0:amd64libpulse0:amd64libcroco3:amd64libxcb-dri2-0:amd64libqt5xml5:amd64libpcre2-16-0:amd64libxcb1:amd64libgdk-pixbuf2.0-0:amd64libfontconfig1:amd64libxcb-render0:amd64libwebpdemux2:amd64libglapi-mesa:amd64libxcb-glx0:amd64libice6:amd64libxml2:amd64libgl1-mesa-dri:amd64fontconfig-configdeepin-image-viewerlibglx-mesa0:amd64libdrm-amdgpu1:amd64libxkbcommon-x11-0:amd64localeslibxcb-composite0:amd64libpixman-1-0:amd64libcairo2:amd64libgsettings-qt1:amd64libffi6:amd64libpango-1.0-0:amd64qt5-image-formats-plugins:amd64libxfixes3:amd64libfribidi0:amd64libxcb-present0:amd64libedit2:amd64libglib2.0-0:amd64libxcb-xkb1:amd64libpangoft2-1.0-0:amd64fonts-dejavu-corelibsm6:amd64libqt5svg5:amd64qt5dxcb-pluginlibxkbcommon0:amd64libdtkcore5:amd64libasyncns0:amd64libxxf86vm1:amd64libqt5multimediawidgets5:amd64libqt5multimedia5:amd64libegl1:amd64libxcb-randr0:amd64libharfbuzz0b:amd64dde-qt5integrationlibqt5network5:amd64libx11-datadeepin-icon-themelibxcb-xinerama0:amd64libraw19:amd64libxcb-shm0:amd64libgraphite2-3:amd64libtiff5:amd64librsvg2-2:amd64fonts-noto-cjklibxrender1:amd64libmng1:amd64libdrm-nouveau2:amd64libqt5concurrent5:amd64libdtkgui5:amd64liblcms2-2:amd64libwebp6:amd64libxcb-xfixes0:amd64libxau6:amd64libxcb-sync1:amd64libjbig0:amd64libogg0:amd64libxi6:amd64libxcb-icccm4:amd64libxtst6:amd64libqt5dbus5:amd64libxext6:amd64libthai0:amd64libxcb-util0:amd64libsensors5:amd64libqt5opengl5:amd64libxcursor1:amd64libvorbisenc2:amd64libflac8:amd64libgl1:amd64libfreetype6:amd64libllvm7:amd64libpulse-mainloop-glib0:amd64libzstd1:amd64libqt5xdg3:amd64libbsd0:amd64libdatrie1:amd64libxshmfence1:amd64tzdatalibxcb-damage0:amd64libqt5core5a:amd64libx11-xcb1:amd64libpangocairo-1.0-0:amd64libicu63:amd64libdrm2:amd64libqt5x11extras5:amd64ca-certificateslibxdmcp6:amd64libxcb-image0:amd64libdrm-radeon1:amd64libc-l10ndde-kwinlibsndfile1:amd64libqt5gui5:amd64libxcb-render-util0:amd64libdtkwidget5:amd64libglx0:amd64libxcb-shape0:amd64openssllibpng16-16:amd64libstartup-notification0:amd64libxdamage1:amd64libelf1:amd64libdframeworkdbus2:amd64libssl1.1:amd64

另一种方法可以执行

$ objdump -p your_build_exec_binary | grep NEEDEDNEEDED               libQt5Widgets.so.5NEEDED               libQt5Gui.so.5NEEDED               libQt5Network.so.5NEEDED               libQt5Core.so.5NEEDED               libstdc++.so.6NEEDED               libm.so.6NEEDED               libgcc_s.so.1NEEDED               libc.so.6

通过上述两个办法获取到动态库后,执行下面的命令,获取开发包。

$ dpkg -S libQt5Network | grep dev
qtbase5-dev:amd64: /usr/lib/x86_64-linux-gnu/libQt5Network.so

填入到Build-Depends中即可。

构建deb包前如何获取软件的依赖包相关推荐

  1. go get 获取被墙依赖包解决方法

    go get 获取被墙依赖包解决方法 参考文章: (1)go get 获取被墙依赖包解决方法 (2)https://www.cnblogs.com/lpfuture/p/11395232.html ( ...

  2. Homebrew卸载软件及其依赖包

    brew uninstall xxx卸载软件只会卸载软件本身而不会同时卸载其依赖包 使用以下命令可完全卸载,并且不会影响到其他软件 brew rmtree xxx 需要安装以下工具 brew tap ...

  3. 依赖包 全局_composer 更新指定的依赖包

    php中文网最新课程 每日17点准时技术干货分享 composer更新指定的依赖包 compoesr 的require/update都可以更新指定的依赖包(升级/降级). require更为灵活些,未 ...

  4. oracle分页包,Oracle分页获取数据的实现 (包和存储过程)

    本文档主要是介绍针对oracle数据库中利用包和存储过程来实现分页获取数据的内容.其实该存储过程的主题思想及主要实现我也是从网上找的,自己做了整合. 包括包头声明和包体实现部分以及C#代码具体调用部分 ...

  5. 强制卸载软件包linux,Linux下如何用rpm卸载软件 rpm依赖包强制卸载

    以Mysql为例. #查看安装的Mysql版本 sjgx2:/usr/local/mysql/bin # rpm -qa |grep -i mysql MySQL-client-5.1.17-0.gl ...

  6. linux rpm卸载包及其依赖,Linux下如何用rpm卸载软件 rpm依赖包强制卸载

    以Mysql为例. #查看安装的Mysql版本 sjgx2:/usr/local/mysql/bin # rpm -qa |grep -i mysql MySQL-client-5.1.17-0.gl ...

  7. python安装依赖包经常出错怎么办_Python 下载依赖包环境经常失败超时解决方法...

    人生苦短,我用python!为什么很多人喜欢用python,因为包多呀,各种调包.但是调包有的时候也调的闹心,因为安装包不是失败就是很慢,很影响自己的工作进度,这里给出一个pip快速安装工具包的办法, ...

  8. android jar包 下载地址,Android Studio项目依赖包下载到本地的jar或aar的路径

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/chenzhengfeng/articl ...

  9. 如何获取ubuntu源码包里面的源码进行编译

    如何获取ubuntu源码包里面的源码进行编译 1.在获取源码包之前,确保在软件源配置文件 /etc/apt/sources.list 中添加了deb-src项 2.使用如下命令获取xxx源码包的详细信 ...

最新文章

  1. linux的ll命令参数,linux ll命令参数的详解
  2. python带我起飞_【有书共读】python带我起飞读书笔记05
  3. 一步步实现:JPA的基本增删改查CRUD(jpa基于hibernate)
  4. 关于字节序(大端法、小端法)的定义
  5. 同一个ip能否两次加入组播_组播IGMPv1/v2/v3精华知识汇总
  6. linux awk 常见字符串处理
  7. 【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)
  8. Project中三种任务类型解释
  9. echart 表格_市政工程表格不会填?市政工程1000个表格模板,一键即可套用
  10. iis设置开启GZIP网页压缩功能
  11. windows XP系统自动关机
  12. 一小心删除了系统文件NTDETECT.COM怎么办
  13. 企业微信客户朋友圈怎么发?朋友圈规则有哪些?
  14. win10总是很快自动休眠怎么解决?
  15. python编写规范
  16. 若依分离版部署遇到的问题
  17. 大学328门专业课程标准英文翻译模板
  18. 拯救BUG 10五笔输入法Shift键切换中英文问题
  19. “安超云ArSDN”荣获“信息基础设施优秀解决方案”
  20. 腾讯云Linux服务器 centos7 Lampp环境搭建 vsftp搭建 ssl证书安装 所遇到的问题

热门文章

  1. python可视化窗口库_Python可视化工具介绍——找到合适的库
  2. gdb函数相关7——选择函数堆栈帧
  3. 【编译原理】分析PL0编译器
  4. C语言将华氏温度转换为摄氏温度
  5. python3进阶篇(二)——深析函数装饰器
  6. 解决Rancher2.5x版本突然无法使用(K3S证书过期大BUG)
  7. 2019智能手表推荐_2019智能手表推荐排行榜前三名top!
  8. 实现一个Android锁屏App的难点总结 1
  9. Pycharm以及cmd调用Anaconda已配置环境的方法
  10. 基于SSM框架的图片分享及评价网站设计与实现毕业设计源码201524