2017-10-21 90 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]在第一次擴展期間未定義。 所有你必須考慮到的是,你需要引用每個$(即使其成爲$$),只有在先決條件列表的第二次擴展期間纔會生效。