makefile中带有一轮扩展的延迟分配

makefile中带有一轮扩展的延迟分配,makefile,Makefile,这可能是一个非常深奥的问题,但归根结底,这是一个更大的问题。有一个全局变量跟踪正在更改的状态(在本例中为NUM)。问题是我需要执行一个延迟赋值(到列表),但我需要扩展NUM的当前值 NUM := ONE LIST = three four $(VAR_$(NUM)) NUM := TWO VAR_ONE := SUCCESS VAR_TWO := FAILURE $(info LIST => $(LIST)) $(info LIST VALUE => $(value LIST

这可能是一个非常深奥的问题,但归根结底,这是一个更大的问题。有一个全局变量跟踪正在更改的状态(在本例中为
NUM
)。问题是我需要执行一个延迟赋值(到
列表
),但我需要扩展
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)
我有一个非常麻烦的解决方案,我将在下面发布,但如果有一个更简单的解决方案,我会很高兴听到它

谢谢。

我(非常难看)的解决方案是使用宏来构造作业,强制进行一轮扩展:

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)
但我想知道是否有更好的办法