一尘不染

遍历Makefile中的列表?

linux

我发现我正在编写许多Makefile,可以使用 n个 元组列表清除它们。但是我找不到任何正确(干净)地进行此操作的方法。到目前为止,我只能使用
$(shell …)trsed 或其他非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个 元组列表?谢谢!


阅读 833

收藏
2020-06-07

共1个答案

一尘不染

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
2020-06-07