2017-10-21 69 views
1

是否可以将生成的变量用作GNU Make规则中的依赖项?我试图做将函数调用作为GNU Make的依赖关系的变量Make

A := 1 2 3 
B := a b c 
C := $(foreach X,$(A),$(foreach Y,$(B),$X-$Y)) 

a: 
    echo A 

b: 
    echo B 

$(C) : $(word 2,$(subst -, ,[email protected])) 
    echo [email protected] 

我想能够运行

make 2-a 

,并得到echo Aecho [email protected],那就是,我想$(word 2,$(subst -, ,[email protected]))被评为依赖列表。但是,它似乎是在规则匹配之前进行评估的。

是否有可能在没有外部程序的情况下将函数调用的变量作为依赖关系?

回答

2

gnumake的神灵预见你的欲望和实现.SECONDEXPANSION

A := 1 2 3 
B := a b c 
C := $(foreach X,$(A),$(foreach Y,$(B),$X-$Y)) 

a: 
    echo A 

b: 
    echoechoecho B 

.SECONDEXPANSION: 
$(C) : $$(word 2,$$(subst -, ,[email protected])) 
    echo [email protected] 

其出现后这个标签会受到他们的先决条件列表的第二扩张,这意味着你可以像使用自动变量的所有规则[email protected]在第一次扩展期间未定义。 所有你必须考虑到的是,你需要引用每个$(即使其成为$$),只有在先决条件列表的第二次扩展期间才会生效。