我有一个Makefile
说:
aaa:bbb
echo 456
bbb:
echo 123
bbb
当目录中 没有文件时,无论是否有aaa
文件都会执行这两条规则。
但为什么?
答案1
你说过这aaa
取决于bbb
。这意味着要创建或更新aaa
,bbb
需要制定目标。
如果aaa
和bbb
作为文件存在于当前目录中,并且 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