当我注意到它不支持重新运行目标时,我正在将我的一些软件包转换为使用debhelper软件包中的dh。
例如:
debian/rules build
来检查构建。debian/rules build
,它什么都不做。或者我做的另一个常见例子:
fakeroot debian/rules binary
以检查我是否正确安装了包中的所有内容。fakeroot debian/rules binary
以测试更改,但它什么也没做。这是我以前使用的CDBS行为的重大变化。有没有解决这个问题?在这些情况下,我不想要跑步debian/rules clean
。
的Debian /规则:
#!/usr/bin/make -f
export DEB_CXXFLAGS_MAINT_APPEND+=-std=gnu++0x
%:
dh $@
答案 0 :(得分:1)
是的,这是dh
的预期和必要行为(它必须跟踪它已经采取的步骤,因为它通常会在完整的包构建过程中被调用几次,它可以利用make
的内部来保持状态。这是一种可怕的黑客攻击,但考虑到可怕的问题限制,这是一个不错的解决方案。)
公平地说,当已经有部分构建时,debian/rules build
应该做什么并没有明确定义。如果构建先前已成功并且没有清除任何状态,则Debhelper将构建视为已完成并非不合理。
当您想要开始构建时,可能只是使用dh_clean
来解决您的问题。这不会调用dh_auto_clean
,因此如果您的代码在debian/
目录之外构建,则不会触及它,但会清除Debhelper状态。
如果您希望能够“回放”部分debhelper构建,以便它认为构建尚未完成,您可以尝试使用类似
的脚本#!/bin/bash
sed -i -e '/dh_auto_build/,$ d' debian/*.debhelper.log
这将从任何* .debhelper.log构建状态中删除“dh_auto_build
”条目及其后的所有内容,以便dh
认为它们尚未完成。它所采取的任何步骤仍将被视为已完成。