我在构builddebian包时遇到了一个问题。
至于规则文件的文件: https : //www.debian.org/doc/manuals/maint-guide/dreq.en.html#rules
debian /规则构build运行dh构build; 然后依次执行以下操作:
dh_testdir dh_auto_configure dh_auto_build dh_auto_test
fakeroot debian / rules二进制运行fakeroot dh二进制; 然后依次执行以下操作:
dh_testroot dh_prep dh_installdirs dh_auto_install dh_install dh_installdocs ... dh_builddeb
但是当我运行dh binary --no-act
命令时,输出包括dh build --no-act
。 这意味着./configure
和make
命令在构builddebian包期间运行两次。 有点奇怪。
我用dpkg-buildpackage -us -uc
来构builddebian包。
更新:我看到它实际上没有运行两次,但为什么 – 无行动显示dh build
输出运行两次?
首先,为了回答第一个问题, Debian政策§4.9概述了debian/rules
build
和binary
规则之间的区别 。 简而言之, build
目标应该只执行“构建”步骤,不要做任何需要root(或fakeroot)权限的任何事情,例如将文件chowning到uid或“安装”事物。 binary
,另一方面,应该采取所有必要的步骤来建立适当的二进制代码。 binary
应该包括所有的build
步骤,如果他们还没有完成。
这里有一些关于你可能会错过的事实:
dh
跟踪作为构建序列(例如,作为dh build
或dh binary
)运行的dh_*
命令,即使在调用之间也是如此。 您可以通过查看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包的步骤。