构建debian软件包时遇到了一个问题。
关于规则文件的文件:https://www.debian.org/doc/manuals/maint-guide/dreq.en.html#rules
debian / rules build运行dh build;反过来运行以下内容:
dh_testdir
dh_auto_configure
dh_auto_build
dh_auto_test
fakeroot debian / rules binary运行fakeroot dh binary;反过来运行以下内容:
dh_testroot
dh_prep
dh_installdirs
dh_auto_install
dh_install
dh_installdocs
...
dh_builddeb
但是当我运行dh binary --no-act
命令时,输出包括dh build --no-act
。这意味着在构建debian包期间./configure
和make
命令运行两次。这很奇怪。
我使用dpkg-buildpackage -us -uc
来构建debian包。
更新:我看到它实际上没有运行两次,但为什么--no-act显示dh build
输出运行两次?
答案 0 :(得分:3)
首先,要回答第一个问题,Debian Policy §4.9中列出了debian/rules
build
和binary
规则之间的差异。简而言之,build
目标应仅执行“构建”步骤,而不执行任何需要root(或fakeroot)权限的操作,例如将文件chowning为uid 0或“安装”内容。另一方面,binary
应该采取所有必要的步骤来构建适当的二进制deb。 binary
应该包含build
的所有步骤(如果尚未完成)。
以下是您可能遗失的dh
的几个事实:
dh
会跟踪作为构建序列的一部分运行的dh_*
命令(例如,作为dh build
或dh binary
的一部分),甚至在调用之间。通过查看debian/$package.debhelper.log
的内容,您可以查看它认为已运行的命令。如果其中列出了一个命令,dh
将认为它已经运行用于命令排序。
dh $sequence --no-act
也会考虑debian/$package.debhelper.log
个文件。因此,当您在一个全新的干净构建目录上运行dh binary --no-act
时,您将看到一长串命令,包括那些需要为build
目标执行的命令。但如果您实际上首先运行 dh build
而然后尝试dh binary --no-act
,则不再显示构建步骤。它只显示准备和创建实际.deb包的步骤。