Makefile 从列表定义的名称生成宏

Makefile 从列表定义的名称生成宏,makefile,Makefile,我在Makefile中有以下定义: PREFIX = PRE POSTFIXES = POST1 POST2 POST3 现在,我想以编程方式生成以下宏: NAME_1 = PRE_POST1 NAME_2 = PRE_POST2 NAME_3 = PRE_POST3 #... 如何做到这一点?假设NAME_35;是文字,这就是您想要的 $(foreach f,$(POSTFIXES),$(eval NAME_$(subst POST,,$f) = $(PREFIX)_$f)) 结果: N

我在Makefile中有以下定义:

PREFIX = PRE
POSTFIXES = POST1 POST2 POST3
现在,我想以编程方式生成以下宏:

NAME_1 = PRE_POST1
NAME_2 = PRE_POST2
NAME_3 = PRE_POST3
#...

如何做到这一点?

假设
NAME_35;
是文字,这就是您想要的

$(foreach f,$(POSTFIXES),$(eval NAME_$(subst POST,,$f) = $(PREFIX)_$f))
结果:

NAME_1 = PRE_POST1
NAME_2 = PRE_POST2
NAME_3 = PRE_POST3
NAME_1 = PRE_POST_X
NAME_2 = PRE_POST_Y
NAME_3 = PRE_POST_Z
说明:

  • 从每个后缀中删除
    POST
    ,只留下数字:
    $(subst POST,,$f)
  • 用上一步中的编号连接
    NAME
    NAME$(subst POST,,$f)
  • 连接
    $(前缀)
    和当前后缀以创建所需的值字符串:
    $(前缀)\u$f
  • 使用
    $(eval)
    将值分配给计算变量名:
    $(eval name_$(subst POST,,$f)=$(前缀)$f)
  • 对列表中的每个后缀都这样做:
    $(foreach f,$(postfix),$(eval NAME_$(subst POST,,$f)=$(PREFIX)$f))
更新与
postfix
值无关的顺序
NAME#
变量:

make根本不做数学,所以你需要玩游戏来“数数”。(感谢魔术师给我展示了这个把戏。)

结果:

NAME_1 = PRE_POST1
NAME_2 = PRE_POST2
NAME_3 = PRE_POST3
NAME_1 = PRE_POST_X
NAME_2 = PRE_POST_Y
NAME_3 = PRE_POST_Z

你的回答很好,给了我一些指导。如果我们做一些更一般的
postfix=POST\u X POST\u Y POST\u Z
,并希望生成像
NAME\u 1=PRE\u POST\u X
这样的宏,会怎么样。。。(仍然使用文字名#,但不依赖于后缀名)。没有
for
循环,我们可以这样做吗?