从 CMake 项目创建 Debian 软件包

2024-01-26

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

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

我做了一些研究,当我使用 CMake 作为构建系统时,似乎至少存在三种不同的方式来创建 Debian 软件包:

  1. 使用 Debian 文档中描述的 debmake 过程(第8章 https://www.debian.org/doc/manuals/debmake-doc/ch08.en.html#cmake-multi).
  2. Use cmake-debhelper https://github.com/sebknzl/cmake-debhelper.
  3. Use dh-cmake https://gitlab.kitware.com/debian/dh-cmake

我研究了所有三种方法,似乎每种方法都有一些优点和缺点。

Debmake

据我了解,使用 debmake 假设我有一个包含源代码和构建系统的上游 tarball,然后我在提取的 tarball 上调用 debmake。之后我得到了很多模板,我需要手动调整它们以填补缺失的空白。我开始这样做,但看起来相当复杂。

cmake-debhelper

我尝试使用它但收到很多错误。 github页面有一个开放问题 https://github.com/sebknzl/cmake-debhelper/issues/3没有解决方案,所以我不再看这个。这也是paho-mqtt-c构建系统当前正在使用,但由于链接的问题而无法工作。

dh-cmake

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

我的研究中是否遗漏了什么?从使用 CMake 管理的软件创建 Debian 软件包的建议步骤是什么?哪些文档值得阅读?


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

debian/
 changelog
 control
 copyright
 rules

然后运行debuild它会运行cmake install到临时文件夹并打包可安装的deb从中打包。 快速创建那些debian文件运行dh_make --createorig并按s为源码包。 然后您需要仔细编辑 debian 文件,如中所述第四章 debian目录下所需文件 https://www.debian.org/doc/manuals/maint-guide/dreq.en.htmlDebian 新维护者指南。

如果您需要设置 cmake 属性或进行任何其他配置,那么您需要调整override_dh_auto_configure in 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) and -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 https://launchpad.net/%7Eyour-launchpad-user/+archive/ubuntu/your-ppa/+packages

不幸的是,还有很多其他步骤,我只是简要描述一下。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 CMake 项目创建 Debian 软件包 的相关文章

随机推荐

  • 我如何在Python中只向下舍入数字/浮点数?

    我将生成这个随机数 例如 12 75 或 1 999999999 或 2 65 我希望始终将此数字向下舍入为最接近的整数 因此 2 65 将四舍五入为 2 抱歉 我问了很多遍 但没有找到答案 谢谢 您可以选择我们int math trunc
  • org.bson.BSONObject 中的 java 类型

    我目前正在学习mongodb 的 BSON java 库 http github com mongodb mongo java driver 我正在尝试改变org bson BSONObject到 XML 中 以便将其转换为XSLT样式表
  • 在solr中搜索特殊字符

    我在 solr 中搜索特殊字符时遇到问题 我的文档有一个 标题 字段 有时它可能像 泰坦尼克号 1999 它有字符 当我尝试使用 在 solr 中搜索时 我收到 400 错误 我试图转义这个字符 所以我尝试了 和 之类的东西 经过这些更改
  • C# 中使用掩码进行位操作

    我需要一些有关 C 中位图操作的帮助 我想要一个UInt16 隔离任意数量的位 并使用另一个位设置它们UInt16 value Example 10101010 Original Value 00001100 Mask Isolates b
  • Android将图片旋转90度(相机拍摄)[重复]

    这个问题在这里已经有答案了 我正在通过代码在我的 Samsung Galaxy SII 设备中拍照 保存并在屏幕上显示它后 我看到它旋转了 90 度 我知道这是一些设备问题 并非所有设备上都会发生这种情况 我正在使用给定的相机意图拍照并将其
  • Apollo 客户端什么是主动查询?

    My Setup Typescript 反应应用程序 后端 GraphQL API 阿波罗客户端 使用 Apollo 客户端 Devtools 扩展进行检查 我的问题 什么是主动查询 Apollo 文档谈论了很多主动查询 但我很难得到一个实
  • 如果填充了另一个字段,则 MVC 3 字段为必填字段

    我有一个简单的问题 例如 我有两个字段映射在模型 ex 上 textbox 1 和 textbox 2 我想问是否存在一种方法 前强制装饰器 仅当我填充 textbox 1 时才强制执行 textbox 2 如果我不填写textbox 1
  • iPhone 在 CoreData 保存时崩溃

    这是一个不同的情况这个问题 https stackoverflow com questions 1230858 iphone core data crashing on save 因为提供的解决方案不起作用并且堆栈不同 当我使用 cored
  • 从 HttpResponseMessage 获取 Excel 文件

    我正在开发一个 ASP NET Core 2 2 项目 我需要使用浏览器下载 Excel 但是当我执行请求时 我只得到一些 Json 我的 Excel 在流中 并且流不为空 这是我的代码 HttpResponseMessage messag
  • 为什么 requestWhenInUseAuthorization 不提示用户访问该位置?

    In my viewDidLoad我有的方法 locationManager CLLocationManager alloc init initializing locationManager locationManager delegat
  • 是否有 DCC32 选项将特定编译器警告视为错误?

    对于命令行构建 我想将警告 例如 构造包含抽象方法的实例 视为错误 我在 Delphi 2009 中没有找到用于此目的的 dcc32 命令行选项 有没有办法 例如使用 dcc32 cfg 来执行此操作 像这样 dcc32 W CONSTRU
  • 获取 QPixmap 的哈希值的最佳方法是什么?

    我正在使用 Qt 4 5 开发一个图形应用程序 并将图像放入 QPixmapCache 中 我想对此进行优化 以便如果用户插入已经在缓存中的图像 它将使用该图像 现在 每个图像都有一个唯一的 ID 有助于在绘制事件时优化自身 但是我意识到
  • PHP 中 error_log() 中的换行符

    如何在使用时插入换行符error log in PHP 我尝试使用 br and n 但那些没有用 添加错误消息时使用双引号 error log This is a two lined message nThis is line two 应
  • 如何使用pickle保存聊天机器人模型

    我创建了一个Chatbot using 聊天机器人 and tkinter图书馆 但每当我打开文件时它就会启动训练模型并且需要花费很多时间 因此我搜索并找到了解决方案泡菜模块 但现在我也尝试了 pickle 它不起作用并显示错误 有什么办法
  • 使用不同类型容器的迭代器范围初始化容器

    假设我们有std set
  • 命令行:“-”转换为“û”

    我在 bat 或 cmd 文件中运行此命令来启动 ftp 脚本 ftp v i s test script txt 命令窗口将其转换为 ftp v i s test script txt 因此它不起作用 注意 如果我从 cmd 窗口手动运行
  • 如何统计特定组中共同值的数量?

    我有一个数据框df df lt data frame shop c A A A B B B C C C product c 1 2 3 4 5 1 5 2 4 对于每对商店 即AB AC and BC 我想统计一下常见产品的数量 预期输出如
  • Ubuntu wsl2 git 在大型存储库上出现“远程端意外挂起”

    在 Windows 上的 wsl2 中的 Ubuntu 19 04 中获得此操作数天 git clone https github com gohugoio hugo git Cloning into hugo error RPC fail
  • 使用 apache commons fileutils 排除特定子目录

    我想使用 apache commons lib 列出当前目录下的所有文件 但排除子目录及其子目录中的所有文件 例如 如果我当前目录是 A 及其子目录为 B C DB 的子目录为 b1 b2 b1 的子目录为 b12 C 的子目录为 c1 c
  • 从 CMake 项目创建 Debian 软件包

    我正在考虑从现有库 paho mqtt c 创建 Debian 软件包 该项目使用 CMake 作为其构建系统 经过一些研究 我认为我需要创建两个或三个不同的包 libpaho mqtt3 带有库 so 文件和相关内容 libpaho mq