2015-11-30 111 views
0

問題是我想在一個變量中集中一些依賴項,但依賴項本身包含在變量中。GNU make:嵌套變量中的規則前提未執行

a=meow 
    b=squeek 

    $(a): 
     touch [email protected] 
    $(b): 
     touch [email protected] 

    targs=$(a) $(b) 

    all: $(targs) 

在真實的情況下,a和b的規則不同,所以我需要它們在不同的目標中。

當我試圖建立這樣一個目標,只有最後一個嵌套的依賴被執行:

$ make 
    touch meow 

    $ ls 
    . .. Makefile meow 

誰能請解釋我如何解決的情況或者我錯了? 我可以製作一個像targs這樣的假目標:$(a)$(b),但是如果有一種方法可以保留我提到的結構,我想知道它。

提前致謝!

UPD:解決。我的錯誤:而不是運行make all我跑make並執行第一個目標而不是all

+0

爲我工作的地方使用下面的行。是否在收到$(b)'時檢查了縮進問題(空格而不是製表符)? – Tsyvarev

+0

@Tsyvarev,我的錯。我正在運行'make',它運行了第一條規則,即$(a)。 當我運行'make all'時,它工作正常。 –

+0

哦,你使用'make'與* default * target,但默認目標是makefile中列出的第一個目標。嘗試'make all'或將all規則移到makefile中的其他位置。 – Tsyvarev

回答

0

Make的默認設置是使用Makefile中的第一個目標。無論是移動所有目標的開頭或在Makefile

.DEFAULT_GOAL := all