我正在观察 make 的一个有趣行为,除了 gmake 中的错误之外,是否有合理的解释呢?
假设我们在 makefile 中有以下内容:
%-animal:
echo "$* is an animal"
%-fox: %-fox-animal
%-wolf: %-wolf-animal
最后两个目标之间的区别在于 "%-wolf" 没有任何配方,而 "%-fox" 有一个空的配方(即只有一行以制表符开头的配方)。
当我们尝试执行规则时,发生了以下情况:
[root@cv19 tmp]# make freddy-animal
echo "freddy is an animal"
freddy is an animal
[root@cv19 tmp]# make freddy-wolf
make: *** No rule to make target `freddy-wolf'. Stop.
[root@cv19 tmp]# make freddy-fox
echo "freddy-fox is an animal"
freddy-fox is an animal
也就是说,具有配方(即使是空配方)的模式规则有效,而没有配方的不起作用。我在理解它应该如何工作方面是否遗漏了什么?