是否可以仅通过编写 debian/rules 编译两次并构建单独的包?

Posted

技术标签:

【中文标题】是否可以仅通过编写 debian/rules 编译两次并构建单独的包?【英文标题】:Is it possible to compile twice and build separate packages only by writing debian/rules? 【发布时间】:2018-01-29 13:57:21 【问题描述】:

让我详细说明我的问题,并详细说明我试图完成的工作。

我的最终目标是拥有两个 debian 软件包:一个包含为 x86 构建的二进制文件,另一个包含为 ARM 构建的二进制文件。在 debian/control 中,我定义了两个不同的包,并且两个包的体系结构当前都设置为“任意”。

我尝试按照https://wiki.debian.org/PkgSplit 上的说明进行操作,并查看了 debhelper (http://www.fifi.org/doc/debhelper/examples/rules.multi2) 的 rules.multi2 示例,但到目前为止没有任何运气。

源代码是一个 Qt 项目,将同时用于 x86 和 ARM。

我正在使用 dpkg-buildpackage 成功构建,但无论我如何尝试,我的源代码都只编译一次。

达到我的目标的理想方法是什么,是否“简单”地在 debian/rules 中输入正确的信息才能使其工作,还是我必须采取其他方法?我不确定这是否可能。我只是走错了路(我是 debian 打包世界的新手)。

(在这个阶段我故意不包括我的 debian/control 和 debian/rules,如果需要,我会提供更多细节,因为在这个阶段它们有点乱)。

编辑: 我被这条评论引导到 PkgSplit https://askubuntu.com/questions/246718/change-environment-variables-in-debian-rules-according-to-debian-control-targets/908351#908351 但对我来说,答案有点神秘,因此非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

没有。

dpkg-buildpackage 的单次运行将为单个架构创建二进制包(amd64、或i386、或armhfs390x 或其他)。

只需多次调用dpkg-buildpackage 即可(交叉)构建多个架构:

dpkg-buildpackage -rfakeroot
dpkg-buildpackage -rfakeroot --host-arch i386
dpkg-buildpackage -rfakeroot --host-arch armhf

这将(最多)创建 3 个包:一个是本机架构(很可能是:amd64),一个用于x86_32(又名i386)和一个用于覆盆子(armhf)。

顺便说一句,PkgSplit 文档讨论了为同一架构创建多个包。例如当您有一个库时,您通常希望将其拆分为库部分(安装libfoo.so.1)和开发部分(安装头文件)。

【讨论】:

那就解决了,感谢您提供如何实现它的信息。 PkgSplit 它让我走错了路,感谢您的澄清!

以上是关于是否可以仅通过编写 debian/rules 编译两次并构建单独的包?的主要内容,如果未能解决你的问题,请参考以下文章

谈谈代码质量问题

是否可以仅在内存中以编程方式编译 java 源代码?

我可以通过 java 反编译工具反编译任何用 C# 或任何其他语言编写的游戏吗?

SWIG C++ 预编译 DLL

语言转换测试

通过逆向工程更改 swf