遍历Makefile中的列表?
我发现我正在编写许多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的命令脚本,并建立它们的依赖任何命令脚本。
如果您还没有阅读过GNU make手册,那真是太好了。
要做您在评论中提出的问题:
dog: ANIMAL=dog.c BULLY=pull_tail SOUND=bark
采用:
dog: ANIMAL=dog.c dog: BULLY=pull_tail
dog: SOUND=bark
以上是 遍历Makefile中的列表? 的全部内容, 来源链接: utcz.com/qa/429173.html