How to generate targets in a Makefile by iterating over a list?
Use text-transforming functions. With patsubst
you can make quite general transformations. For constructing filenames, addsuffix
and addprefix
are both convenient.
For the rules, use pattern rules.
The overall result might look something like this:
LIST = 0 1 3 4 5
targets = $(addprefix rambo, $(LIST))
all: $(targets)
$(targets): rambo%: rambo%.sh
sh $<
If you're using GNU make, you can generate arbitrary targets at run-time:
LIST = 0 1 2 3 4 5
define make-rambo-target
rambo$1:
sh rambo_script$1.sh
all:: rambo$1
endef
$(foreach element,$(LIST),$(eval $(call make-rambo-target,$(element))))