【问题标题】:Makefile dependencies without triggering dependent rules不触发依赖规则的 Makefile 依赖
【发布时间】:2014-04-07 19:24:31
【问题描述】:

如果我有一个目标,它有一些依赖项,并且我调用该目标,make 将尝试在相关规则可用时生成依赖项(它们是可用的)。有什么办法可以防止这种行为,基本上是告诉make 要使用该目标,依赖项必须可用,但如果它们不可用就出错?

例如,假设foobar 不存在:

foo:
    echo a > foo

bar:
    echo b > bar

target: foo bar
    cat foo bar > foobar

期望的行为

> make target
error, cannot satisfy dependencies

实际行为

> make target
echo a > foo
echo b > bar
cat foo bar > foobar

正在使用 GNU make,如果它有什么不同的话。

【问题讨论】:

    标签: makefile


    【解决方案1】:

    没有。如果 make 找不到构建先决条件的规则,并且它不存在,那么 make 将失败。如果 make 可以找到构建先决条件的规则,并且它已过期,则 make 将构建它。

    如果您不想重建它,则不应将其列为先决条件。你可以这样做:

    target:
            [ -f foo ] && [ -f bar ] || { echo "cannot satisfy prerequisites"; exit 1; }
    

    【讨论】:

    • 很遗憾,但我预料到了。
    【解决方案2】:

    我通常做的事情是这样的

    target: dependency
    
    dependency:
            @echo fatal error: $@ is missing; exit 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多