功能在先决条件

gex*_*ide 4 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

但是,这不起作用,因为在扩展模式之前评估函数.那么它是怎样工作的?

Lou*_*uis 6

你必须使用.SECONDEXPANSION:

.SECONDEXPANSION:
foo/%.bar : foo/$$(dir %)prereq.o
    @echo $@ $<
Run Code Online (Sandbox Code Playgroud)

$$$$(dir...)是必要的,这样,直到第二膨胀发生它不是评估.