Makefile:如果 $^ 获得所有先决条件,可以使用什么来获得所有目标

Makefile: If $^ gets all the prerequisites, what could be used to get all the targets

想法是这样的:

$(filenameParam)_%.sfx : commun_prereq.per
     mycommand $< (all my $@)

其中 % 可以是任何一个字母,有时是 e、f,有时是 e、s,有时是 h、r、t,基本上任何包含一个字母的文件。

对于给定的规则调用,只有一个目标,并且该目标的名称被放入 $@ 自动变量中。当 make 尝试构建目标 foo_h.sfx 时,$@ 将是 foo_h.sfx;当 make 尝试构建目标 foo_r.sfx 时,$@ 将是 foo_r.sfx,等等

还有一个问题:一个模式规则中可能有多个目标模式。这导致 make 在一次规则调用中构建所有这些目标。在这种情况下,$@ 是 make 想要构建的导致此规则被触发的目标。如果您想获得其他目标之一,您需要使用与模式匹配的 $* 自己构建它。所以:

%.x %.y :
        @echo '@ = $@ / * = $*'

将得到输出:

$ make foo.x
@ = foo.x / * = foo

$ make foo.y
@ = foo.y / * = foo