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
想法是这样的:
$(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