这可能是一个非常深奥的问题,但这是一个更大的问题归结为此。有一个全局变量跟踪状态(在这种情况下它是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)
我有一个非常麻烦的解决方案,我将在下面发布,但如果有一个更简单的解决方案,我会很高兴听到它。
谢谢。
答案 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)
但我想知道是否有更好的方法。