【问题标题】:Creating a Debian Package from CMake Project从 CMake 项目创建 Debian 包
【发布时间】:2020-01-09 17:26:24
【问题描述】:

我正在考虑从现有库 (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 软件包的推荐步骤是什么?阅读哪些文档有用?

【问题讨论】:

标签: cmake debian deb


【解决方案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 属性或进行任何其他配置,则需要在 rules 中调整 override_dh_auto_configure

#!/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 文件夹

【讨论】:

  • 感谢您的回答。从我目前收集的信息来看,我认为dh_make(带有下划线)是一个较旧的解决方案,更现代的方法是使用debmake 来生成 Debian 文件,但不确定是否正确。无论如何,我不知道dh_make--createorig 选项,这当然很有用,这样我就不需要source tarball 开始了。如果您的源代码在 git 中,那么您的文件夹可能不是 package-version 格式,所以我需要重命名文件夹或使用 -p <package>_<version> 选项。
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
相关资源
最近更新 更多