Makefile:如果 $^ 获得了所有先决条件,则可用于获取所有目标的内容



这个想法是这样的:

$(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,等等。

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

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

将获得输出:

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

最新更新