使用不同的变量值制作多次调用另一个规则的规则

Mat*_*ner 13 makefile gnu-make

我有一个规则something,适用于变量VAR.我也有另一个规则something-all,需要运行something,以VAR设置为每个值vars.

vars = hello world

something:
    echo $(VAR)

something-all:
    $(foreach VAR,$(vars),something)
Run Code Online (Sandbox Code Playgroud)

我得到了这不太有效

noob@work:~/Desktop$ make something-all
something something
make: something: No such file or directory
make: *** [something-all] Error 1
Run Code Online (Sandbox Code Playgroud)

它应该打印hello\nworld.

我曾经通过检索VAR来通过通配符规则这样做%,但感觉这是错误的方法.这看起来像这样:

vars = hello world

all: $(foreach VAR,$(vars),something-$(VAR))

something-%:
    echo $*
Run Code Online (Sandbox Code Playgroud)

Vik*_*ram 5

以下应该可以解决您的问题

使用 foreach(在 sparc-solaris 2.8 和 windows 上尝试过 GNU Make 3.80)

vars = hello world

something:
    echo $(VAR)

something-all:
    $(foreach i, $(vars), $(MAKE) something VAR=$i || exit 1;)
Run Code Online (Sandbox Code Playgroud)

使用 shell for-loop(在 GNU Make 3.80 上试过,在 sparc-solaris 2.8 上试过 cc make)

vars = hello world

something:
    echo $(VAR)

something-all:
    for i in $(vars); do $(MAKE) something VAR=$$i || exit 1; done
Run Code Online (Sandbox Code Playgroud)