A有一个制作目标foo/%.bar
。它匹配以下文件:
foo/x/y/z.bar
foo/a.bar
现在,我想要一个先决条件prereq.o
,它必须与.bar
文件位于同一个文件夹中。因此,对于foo/x/y/z.bar
,先决条件应为foo/x/y/prereq.o
,对于foo/a.bar
,它应为foo/prereq.o
。
如何实现这一目标?
我尝试使用dir
这样的功能:
foo/%.bar : foo/$(dir %)prereq.o
但是,这不起作用,因为在扩展模式之前评估函数。那它是如何运作的?
答案 0 :(得分:5)
您必须使用.SECONDEXPANSION
:
.SECONDEXPANSION:
foo/%.bar : foo/$$(dir %)prereq.o
@echo $@ $<
$$
中的$$(dir...)
是必需的,因此在第二次扩展发生之前不会对其进行评估。