区别

区别

我正在尝试创建我的第一个 deb,所以我对此还不太了解。这是我目前的“规则”文件:

#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1

# This has to be exported to make some magic below work.
export DH_OPTIONS

%:
        dh $@

目前,我正在阅读文档并尝试了解如何编写更复杂的“规则”文件。我被困在“binary-arch”和“binary-indep”目标上。简而言之,我不明白它们实际上代表什么。

文档表明,软件包 arch 由“Control”文件中的“Architecture:”行决定。

  • 如果值为“all”,则该包依赖于体系结构。

  • 如果值为“any”,则该包与架构
    无关。

我完全理解这部分内容。但后来我开始阅读 debhelper 工具的手册文件。

man dpkg-buildpackage 说:

  1. 它调用 debian/rules build,然后是 fakeroot debian/rules binary-target(除非已使用 -S 请求仅源代码构建)。请注意,binary-target 是 binary(默认情况,或者如果指定了 -b)或 binary-arch(如果指定了 -B)或 binary-indep(如果指定了 -A)

man dh 说:

二进制独立序列中的命令传递了“-i”选项以确保它们仅适用于二进制独立包,而二进制架构序列中的命令传递了“-a”选项以确保它们仅适用于体系结构相关的包。

然后我尝试通过输入以下内容查看“binary”、“binary-arch”和“binary-indep”目标的默认命令集

$ dh binary --no-act

$ dh binary-arch --no-act

$ dh binary-indep --no-act 

并获得完全相同的命令集。唯一的区别是每个命令后的“-i”和“-a”标志。

所以第一个问题是 - 例如“dh_auto_build”,“dh_auto_build -a”和“dh_auto_build -i”(或其他 dh_command)之间有什么区别?

另一个问题是 - 如果我“控制”文件仅包含具有“所有”架构的包,我是否需要使用二进制独立目标,或者我可以不用它并仅在“规则”文件中使用 build-arch 目标?

答案1

区别

目标binary-indep将构建Architecture: all源包中的所有二进制包。目标binary-arch将构建所有其他包,包括Architecture: any带有明确体系结构列表或某些体系结构通配符的包,例如Architecture: linux-any

为什么?

如果您有一个包含两种二进制包(体系结构相关和独立)的源包,则构建过程中这两个路径的区别是相关的:包的初始构建会构建两种类型的二进制包,但是在不同体系结构上的每个后续构建只需要构建体系结构相关的二进制包,因为您已经在第一次构建中构建了所有与体系结构无关的包。

例子

假设您有一个名为 的源程序包foo,它构建二进制程序包foo-programsfoo-data。虽然 中的程序foo-programs需要编译(例如,因为它是用 C 编写的),因此二进制程序包为Architecture: any,但 中的数据文件foo-data(图像、翻译、帮助文本、文档、纹理、游戏地图等)对于所有架构都是相同的,因此它是Architecture: all。假设 foo 的上游版本是 1.0,它是该上游版本的第一个 Debian 程序包修订版。

amd64您首先在64 位 PC 架构上构建所有软件包,您将获得foo-programs_1.0-1_amd64.debfoo-data_1.0-1_all.deb。但您还希望能够在 32 位 PC 上运行它,因此您还需要foo-programs_1.0-1_i386.deb。但您不需要第二个foo-data_1.0-1_all.deb,因此您的构建过程只需要*-arch目标,例如通过调用dpkg-buildpackage -B

明确目标的必要性

使用最小dh风格debian/rules可能不需要明确指定目标,因为许多上游构建系统不会做出这种区分,但如果他们这样做(例如通过为make构建文档设置单独的目标,您可以像这样实现:

#!/usr/bin/make -f
%:
        dh $@

override_dh_auto_build-indep:
        $(MAKE) -C docs

(示例取自dh(7)手册页。)

相关内容