通过一轮扩展在makefile中延迟赋值

时间:2014-02-15 19:19:21

标签: makefile

这可能是一个非常深奥的问题,但这是一个更大的问题归结为此。有一个全局变量跟踪状态(在这种情况下它是NUM),这正在改变。问题是我需要执行延迟分配(到LIST)但我需要扩展{em>当前值NUM

NUM := ONE

LIST = three four $(VAR_$(NUM))

NUM := TWO

VAR_ONE := SUCCESS
VAR_TWO := FAILURE

$(info LIST => $(LIST))
$(info LIST VALUE => $(value LIST) )

这导致:

LIST => three four FAILURE
LIST VALUE => three four $(VAR_$(NUM))

我想看到的内容:

LIST => three four SUCCESS
LIST VALUE => three four $(VAR_ONE)

我有一个非常麻烦的解决方案,我将在下面发布,但如果有一个更简单的解决方案,我会很高兴听到它。

谢谢。

1 个答案:

答案 0 :(得分:0)

我的(非常丑陋)解决方案是使用宏来构建赋值,强制进行一轮扩展:

define append_deferred
$(1) += $(2)
endef

NUM := ONE

LIST = three four
$(eval $(call append_deferred,LIST,$$(VAR_$(NUM))))

NUM := TWO

VAR_ONE := SUCCESS
VAR_TWO := FAILURE

$(info LIST == $(LIST))
$(info LIST VALUE == $(value LIST) )

打印出所需的结果:

LIST => three four SUCCESS
LIST VALUE => three four $(VAR_ONE)

但我想知道是否有更好的方法。