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

Makefile:如果$^获得所有先决条件,那么可以使用什么来获得所有目标,makefile,gnu,targets,Makefile,Gnu,Targets,这就是想法: $(filenameParam)_%.sfx : commun_prereq.per mycommand $< (all my $@) $(filenameParam)\%.sfx:common\u prereq.per mycommand$

这就是想法:

$(filenameParam)_%.sfx : commun_prereq.per
     mycommand $< (all my $@)
$(filenameParam)\%.sfx:common\u prereq.per
mycommand$<(所有我的$@)

其中%可以是任意一个字母,有时是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

模式规则实例化与匹配目标数量相同的规则。因此,您的规则不仅仅是一个,而是调用make时有多少个
*.sfx
文件。对于每一个目标,
$@
都与特定目标匹配。你想要什么还不清楚。当不存在
*.sfx
时,您对make有什么期望?