【问题标题】:debhelper dh not rerunning when expected todebhelper dh 未按预期重新运行
【发布时间】:2014-07-17 17:09:51
【问题描述】:
当我注意到它不支持重新运行目标时,我正在将我的一些包转换为使用 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 $@
【问题讨论】:
标签:
debian
packaging
deb
debhelper
【解决方案1】:
是的,这是dh 的预期和必要行为(它必须跟踪它已经采取了哪些步骤,因为它通常会在完整的包构建过程中被调用多次并且它不能利用 make 的内部结构来保持状态。这是一种可怕的 hack,但考虑到可怕的问题限制,它是一个不错的解决方案。
公平地说,当已经有部分构建时,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 会认为它们尚未完成。在此之前采取的任何步骤仍将被视为已完成。