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