为什么当前目录中不存在先决条件时 Makefile 规则仍然执行?

为什么当前目录中不存在先决条件时 Makefile 规则仍然执行?

我有一个Makefile说:

aaa:bbb
    echo 456
bbb:
    echo 123

bbb当目录中 没有文件时,无论是否有aaa文件都会执行这两条规则。

但为什么?

答案1

你说过这aaa取决于bbb。这意味着要创建或更新aaabbb需要制定目标。

如果aaabbb作为文件存在于当前目录中,并且 ifaaa比 更新bbb,则两个目标都不需要重建,但 ifaaa与 相比已经过时bbb 或者如果bbb缺失,然后aaa必须进行构建以确保它是最新的(如果bbb丢失,这也需要涉及重建bbb)。

下面的例子表明,如果两个目标实际上创造相关文件,那么目标不会在第二次调用时构建make。如果该bbb文件被删除,两个目标都会重建:

$ cat Makefile
aaa: bbb
        echo 456
        touch aaa

bbb:
        echo 123
        touch bbb
$ rm -f aaa bbb
$ make
echo 123
123
touch bbb
echo 456
456
touch aaa
$ make
`aaa' is up to date.
$ rm bbb
$ make
echo 123
123
touch bbb
echo 456
456
touch aaa

相关内容