Makefile依赖项而不触发依赖规则

时间:2014-04-07 19:24:31

标签: makefile

如果我有一个目标,它有一些依赖关系,并且我调用该目标,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,如果它有任何区别。

2 个答案:

答案 0 :(得分:1)

没有。如果make找不到构建先决条件的规则,并且它不存在,则make将失败。如果让CAN找到建立先决条件的规则,并且它已经过时,那么make将构建它。

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

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

答案 1 :(得分:1)

我通常做的就是

target: dependency

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