从CMake项目创建Debian软件包

时间:2020-01-09 17:26:24

标签: cmake debian deb

我正在考虑从现有库(paho-mqtt-c)创建一个Debian软件包。该项目使用CMake作为其构建系统。经过研究,我认为我需要创建两个或三个不同的程序包:

  • libpaho-mqtt3(带有库.so文件和相关内容)
  • libpaho-mqtt3-dev(带有头文件)
  • 也许我还需要带有示例文件或文档的第三个软件包(称为paho-mqtt3?)

我已经进行了一些研究,当我使用CMake作为构建系统时,似乎至少存在三种方法可以创建Debian软件包:

  1. 使用Debian文档(Chapter 8)中所述的debmake过程。
  2. 使用cmake-debhelper
  3. 使用dh-cmake

我研究了这三种方法,似乎每种方法都有其优点和缺点。

Debmake

据我所知,使用debmake假定我在源代码和构建系统上都有一个上游tarball,然后在提取的tarball上调用debmake。之后,我得到了很多模板,我需要对其进行手动调整以填补缺失的空白。我开始这样做,但似乎很复杂。

cmake-debhelper

我尝试使用它,但是收到很多错误。 github页面上有一个open issue没有解决方案,所以我不再关注它。这也是paho-mqtt-c构建系统当前正在使用的系统,但是由于链接的问题,它无法正常工作。

dh-cmake

我简要地研究了一下,这似乎是最现代的解决方案,应该可以将其与CPack结合使用。但是,似乎dh-cmake仅适用于Ubuntu 18.04和16.04,但是我使用的是Ubuntu 19.10,因此无法在我的系统上安装dh-cmake。

我错过了研究的任何内容吗?从用CMake管理的软件中创建Debian软件包的推荐步骤是什么?阅读哪些文档是有用的?

1 个答案:

答案 0 :(得分:1)

简而言之,在 Ubuntu 上您至少需要创建以下文件:

debian/
 changelog
 control
 copyright
 rules

然后运行 ​​debuild 它将运行 cmake install 到临时文件夹并从中打包一个可安装的 deb 包。 要快速创建这些 debian 文件,请运行 dh_make --createorig 并按 s 获取源包。 然后,您需要按照 Debian 新维护者指南的 Chapter 4. Required files under the debian directory 中的说明仔细编辑 debian 文件。

如果您需要设置 cmake 属性或进行任何其他配置,则需要在 override_dh_auto_configure 中调整 rules

#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
export DH_VERBOSE = 1

%:
    dh $@

override_dh_auto_configure:
    dh_auto_configure -- \
    -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) \
    -DIWINFO_SUPPORT=OFF

这里的 -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)-DIWINFO_SUPPORT=OFF 将直接传递给 cmake。

然后您可以将您的包上传到 Ubuntu PPA:

debuild -S -I
dput dput ppa:your-launchpad-user/your-ppa ../*_source.changes

之后 PPA 构建机器人将编译您的包并将其发布到 PPA,您将在 https://launchpad.net/~your-launchpad-user/+archive/ubuntu/your-ppa/+packages

上看到它们

遗憾的是还有很多其他步骤,我只是简单描述了。

更复杂的事情需要 dh-cmake。如果您想发布到 PPA,CPack 将不适合您,因为它的 buildbot 无论如何都会运行 debhelper(debuild 的简短版本),因此它需要 debian 文件夹