Makefile 从列表定义的名称生成宏
我在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
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
循环,我们可以这样做吗?