ser*_*arl 5 debian packaging deb
我正在尝试创建我的第一个 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 $@
Run Code Online (Sandbox Code Playgroud)
目前我正在阅读文档并试图了解如何编写更复杂的“规则”文件。我被困在 'binary-arch' 和 'binary-indep' 目标上。简而言之,我不明白它们究竟代表什么。
文档说包 arch 由“Control”文件中的“Architecture:”行决定。
如果值为“all”,则该包依赖于体系结构。
如果值为“any”,则包是
独立于体系结构的。
我完全理解这部分。但后来我开始阅读 debhelper 工具的 man 文件。
man dpkg-buildpackage 说:
- 它调用 debian/rules 构建,然后调用 fakeroot debian/rules 二进制目标(除非使用 -S 请求了纯源构建)。请注意,binary-target 是 binary(默认情况下,或者如果指定了 -b)或 binary-arch(如果指定了 -B)或 binary-indep(如果指定了 -A)
man dh 说:
binary-indep 序列中的命令传递了“-i”选项以确保它们仅适用于与二进制无关的包,并且 binary-arch 序列中的命令传递了“-a”选项以确保它们仅适用于体系结构相关的包.
然后我尝试通过键入来查看“binary”、“binary-arch”和“binary-indep”目标的默认命令集
$ dh binary --no-act
$ dh binary-arch --no-act
$ dh binary-indep --no-act
Run Code Online (Sandbox Code Playgroud)
并获得完全相同的命令集。唯一的区别是每个命令后面的“-i”和“-a”标志。
所以第一个问题是 - 例如 'dh_auto_build'、'dh_auto_build -a' 和 'dh_auto_build -i'(或其他一些 dh_command )之间有什么区别?
另一个问题是 - 如果我的“控制”文件仅由“所有”架构的包组成,我是否需要使用 binary-indep 目标,或者我可以不用它而只在我的“规则”文件中使用 build-arch 目标?
目标binary-indep构建Architecture: all源包中的所有二进制包。目标binary-arch构建所有其他包,或者Architecture: any具有显式体系结构列表或某些体系结构通配符(例如Architecture: linux-any.
如果您有一个包含两种二进制包(依赖于体系结构和独立于体系结构)的源包,则构建过程中这两种路径的区别是相关的:包的初始构建会构建两种类型的二进制包,但每个后续构建在不同的体系结构上只需要构建依赖于体系结构的二进制包,因为您已经在第一次构建中构建了所有与体系结构无关的包。
假设您有一个名为的源包foo,它构建二进制包foo-programs和foo-data. 虽然程序需要foo-programs编译(例如,因为是用 C 编写的),因此二进制包是 的Architecture: any,但其中的数据文件foo-data(图像、翻译、帮助文本、文档、纹理、游戏地图等)是相同的对于所有架构,因此它是Architecture: all. 假设 foo 的上游版本是 1.0,它是该上游版本的第一个 Debian 软件包修订版。
amd64您首先在64 位 PC 的架构上构建所有软件包,您将获得foo-programs_1.0-1_amd64.deb和foo-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
Run Code Online (Sandbox Code Playgroud)
(示例取自dh(7)手册页。)
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |