2011-10-07 114 views
0

我幾乎不知道有足夠的makefile來破解其他人的makefile,有時甚至沒有那麼多。我目前的僱主有一個相當複雜的make環境,我在makefile中添加了兩個目標,主要是爲了自我記錄我需要的所有交換機。 (有可能有更好的方法來做到這一點...如果有,請讓我知道!!)爲什麼遞歸調用時會丟失變量設置?

無論如何,第一個目標按預期工作。第二個目標與第一個目標相同,但BENCH指派的末尾有「2」。否則,它的確切的呼叫。在執行期間的某個點,BENCH變量被用來創建一個目錄。 第一個目標按預期創建目錄。第二個目標使用默認的BENCH名稱而不是傳遞給它的目錄來創建目錄。不知何故,它在命令行中丟失了變量設置,即使第一個目標的語法幾乎相同。

爲什麼它在自我調用時會失去我的變量設置?是否有一些微妙之處,我錯過了?這甚至是有效的事情嗎?

comp_gate_oct04_ff: 
    make clean all BENCH=GATE_OCT04_FF SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 | tee all_gate_oct04_ff.log 
    @tail all_gate_oct04_ff.log | mail -s "Compile for GATE_OCT04_FF is complete" $(SMS_ADDR) $(USER) 

comp_gate_oct04_ff2: 
    make clean all BENCH=GATE_OCT04_FF2 SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 | tee all_gate_oct04_ff2.log 
    @tail all_gate_oct04_ff2.log | mail -s "Compile for GATE_OCT04_FF2 is complete" $(SMS_ADDR) $(USER) 
+0

你正在使用哪個版本的Make? (試試'make -v',看看它是怎麼說的。) – Beta

+0

它的GNU Make 3.81 – SDGator

+0

注意:遞歸調用make時,你應該使用$(MAKE)而不是make:https://www.gnu.org/s/ hello/manual/make/MAKE-Variable.html –

回答

0

我看不出爲什麼會出現此錯誤,我無法重現它。試試更簡單:

comp_gate_oct04_ff: 
    make foo BENCH=GATE_OCT04_FF 

comp_gate_oct04_ff2: 
    make foo BENCH=GATE_OCT04_FF2 

foo: 
    @echo BENCH is $(BENCH) 

告訴我們這是怎麼回事,我們將從那裏開始。

編輯:
好的,我們已經把問題減少了一半。現在試試這個:

comp_gate_oct04_ff: 
    make clean 
    make all BENCH=GATE_OCT04_FF SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 

comp_gate_oct04_ff2: 
    make clean 
    make all BENCH=GATE_OCT04_FF2 SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 
+0

這表現了它應該的方式,並且不會重現錯誤...調用第一個目標打印xxx_FF,第二個目標打印xxx_FF2。啊!! – SDGator

相關問題