我发现我正在编写许多Makefile,可以使用 n个 元组列表清除它们。但是我找不到任何正确(干净)地进行此操作的方法。到目前为止,我只能使用 $(shell …) 和 tr , sed 或其他非Makefile标准。
例如,我想这样做:
XYZs = \ dog.c pull_tail bark \ duck.c chase quack \ cow.c tip moo all: @- $(foreach X Y Z,$(XYZs), \ $(CC) $X -o bully/$Y ; \ ln bully/$Y sounds/$Z ; \ )
有没有一种很好的方法来迭代Makefile中的 n个 元组列表?谢谢!
Makefile本质上是声明性的,因此我认为make本身不能提供所需的内容。但是,您似乎想将某些字符串值与特定目标相关联,因此可能会引起关注GNU make 的“ 目标特定变量值”功能。这是手册的摘录:
目标特定变量的另一个特殊功能:定义目标特定变量时,该变量值也对该目标的所有依赖项有效(除非这些依赖项用其自己的目标特定变量值覆盖它)。因此,例如,如下语句: prog : CFLAGS = -g prog : prog.o foo.o bar.o 将设置CFLAGS以-g在命令脚本prog,但它也将设置CFLAGS,以-g在创建prog.o,foo.o的,而文件bar.o的命令脚本,并建立它们的依赖任何命令脚本。
目标特定变量的另一个特殊功能:定义目标特定变量时,该变量值也对该目标的所有依赖项有效(除非这些依赖项用其自己的目标特定变量值覆盖它)。因此,例如,如下语句:
prog : CFLAGS = -g
prog : prog.o foo.o bar.o
将设置CFLAGS以-g在命令脚本prog,但它也将设置CFLAGS,以-g在创建prog.o,foo.o的,而文件bar.o的命令脚本,并建立它们的依赖任何命令脚本。
CFLAGS
-g
prog
如果您还没有阅读过GNU make手册,那真是太好了。
编辑: 要做您在评论中提出的问题:
dog: ANIMAL=dog.c BULLY=pull_tail SOUND=bark
采用:
dog: ANIMAL=dog.c dog: BULLY=pull_tail dog: SOUND=bark