代码之家  ›  专栏  ›  技术社区  ›  jfMR

部分展开递归展开变量

  •  0
  • jfMR  · 技术社区  · 7 年前

    考虑下面的MaFo文件示例:

    all:;
    
    varname := a
    
    val = $($(varname)-value)
    
    a-value := AAA
    b-value := BBB
    
    $(info val: $(val))
    varname := b
    $(info val: $(val))
    

    正如所料,正在运行 make 在此makefile上生成以下结果:

    val: AAA
    val: BBB
    

    自从 val recursively expanded variable ,其展开在引用时发生(即。, $(val) ).

    ,变量 a-value 还没有定义。因此,定义 作为一个 simply expanded variable 相反(即 := 而不是 = ):

    val := $($(varname)-value) 
    

    $($(varname)-value) 存在 立即扩大 到一个空字符串,这反过来会导致一个空字符串 美元(val) .

    我想知道是否有办法 扩大 varname 瓦尔 推迟 结果的展开,直到 是 参考 瓦尔 在上面的makefile中实际定义为:

    val = $(a-value) 
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   MadScientist    7 年前

    你可以这样做:

    simplevar := $(varname)
    val = $($(simplevar)-value)