1

当我注意到它不支持重新运行目标时,我正在将我的一些包转换为使用 debhelper 包中的 dh。

例如:

  1. 我跑去debian/rules build检查构建。
  2. 做一个小的代码更改。
  3. 再次运行debian/rules build,它什么也没做。

或者我做的另一个常见例子:

  1. 我跑来fakeroot debian/rules binary检查我是否在包中正确安装了所有东西。
  2. 发现缺少的东西;纠正问题。
  3. 运行fakeroot debian/rules binary以测试更改,它什么也不做。

这是我之前使用的 CDBS 行为的一个重大变化。有解决办法吗?我觉得debian/rules clean在这些情况下不需要跑步。

Debian/规则:

    #!/usr/bin/make -f

    export DEB_CXXFLAGS_MAINT_APPEND+=-std=gnu++0x

    %:
       dh $@
4

1 回答 1

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会认为它们尚未完成。在此之前采取的任何步骤仍将被视为已完成。

于 2014-07-18T20:15:46.300 回答