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

时间:2017-07-12 14:12:51

标签: makefile gnu targets

这是个主意:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

将获得输出:

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

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