在下面的Makefile片段中,makefile行为的正常方式是当foo.o在此处列出依赖项时,如/tmp/foo.o:abc.o xyz.o lmn.o等然后解析make转到列出如何的规则使依赖(abc.o xyz.o lmn.o),但这里目标/tmp/foo.o列出了没有依赖性,即使然后如何执行下一行或它只是被忽略 .
请尽快解释这个行(%.o:$$(addsuffix /%.c,foo bar)foo.h)的执行方式和原因 . 任何身体帮助都非常感谢 . 因为我在make文件上的演讲,我需要它 .
.SECONDEXPANSION:
/tmp/foo.o:
%.o:$$(addsuffix /%.c,foo bar)foo.h @echo $ ^
1 回答
这是一个奇特的makefile . 看来写这篇文章的人并不了解Make .
使用
SECONDEXPANSION
会导致先决条件列表:要扩大两次;首先是这个:
然后到这个:
This use of SECONDEXPANSION accomplishes nothing. 我们也可以像这样编写规则:
或这个:
无论如何,这是一种模式规则 . 如果您尝试构建
snaf.o
(并且目标snaf.o
没有明确的规则),那么Make将考虑此规则,匹配词干snaf
,以便规则等效于此:None of this has any bearing on the target /tmp/foo.o ,因为模式规则与其中包含斜杠的目标不匹配 . (如果模式规则是
/tmp/%.o: ...
,那将是一个不同的故事 . )因此这两个规则并没有真正相互作用,而且作者的意图也不清楚 .