【问题标题】:debhelper dh not rerunning when expected todebhelper dh 未按预期重新运行
【发布时间】:2014-07-17 17:09:51
【问题描述】:

当我注意到它不支持重新运行目标时,我正在将我的一些包转换为使用 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 $@

【问题讨论】:

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

    【讨论】:

    • 这很不幸,但似乎是真的。
    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多