功能在先决条件

时间:2014-12-20 19:27:25

标签: makefile gnu-make

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

但是,这不起作用,因为在扩展模式之前评估函数。那它是如何运作的?

1 个答案:

答案 0 :(得分:5)

您必须使用.SECONDEXPANSION

.SECONDEXPANSION:
foo/%.bar : foo/$$(dir %)prereq.o
    @echo $@ $<

$$中的$$(dir...)是必需的,因此在第二次扩展发生之前不会对其进行评估。