@Idelicの答えに対する私の2セント、いくつかのMakeを使用する必要がある場合は、egを使用
し$cmd
てそれらをエスケープする必要があります$$
LIST = 0 1 2 3 4 5
define make-rambo-target
$(info create target: $(addprefix rambo_script, $(addsuffix .sh, $1)).)
rambo$1: $$(addprefix rambo_script, $$(addsuffix .sh, $1))
sh $$<
endef
all: $(addprefix rambo, $(LIST))
$(foreach element, $(LIST), $(eval $(call make-rambo-target,$(element))))
出力:
$ make
create target: rambo_script0.sh.
create target: rambo_script1.sh.
create target: rambo_script2.sh.
create target: rambo_script3.sh.
create target: rambo_script4.sh.
create target: rambo_script5.sh.
sh rambo_script0.sh
sh rambo_script1.sh
sh rambo_script2.sh
sh rambo_script3.sh
sh rambo_script4.sh
sh rambo_script5.sh
注:ここでは、Makeasによって「見られる」ルールがあります
rambo0: $(addprefix rambo_script, $(addsuffix .sh, 0))
sh $<
しかし、ここでは、エスケープせずに書くことができたはずです。
rambo$1: $(addprefix rambo_script, $(addsuffix .sh, $1))
sh $$<
したがって、ルールは次のように「見られます」。
rambo0 : rambo_script0.sh
sh $<
Makeがそれを解析するとき。