There are many ways to do this.
You can do what Andrew suggests without hard coding the prefix:
directories = module1 module2 module2 %/foo: ; mkdir -p -- " $@ " copy: $(addsuffix /foo,$(directories))
which gives
$ make -n copy mkdir -p -- "module1/foo" mkdir -p -- "module2/foo" mkdir -p -- "module3/foo"
You can also generate a copy target from the makefile:
directories = module1 module2 module2 define copy-target copy:: ; cd $1 && mkdir foo endef $(foreach dir,$(directories),$(eval $(call copy-target,$(dir))))
This gives:
$ make -n copy cd module1 && mkdir foo cd module2 && mkdir foo cd module3 && mkdir foo
You can also generate commands, not the goal:
directories = module1 module2 module2 copy: ; $(foreach dir,$(directories),(cd $(dir) && mkdir foo) &&) :
that leads to
$ make -n copy (cd module1 && mkdir foo) && (cd module2 && mkdir foo) && (cd module3 && mkdir foo) && :
Idelic
source share