2013-03-24 46 views
0

我想運行「問題模式」的遞歸調用,並在非常特殊的場景中出現錯誤。makefile遞歸-q模式錯誤1

我使用的是MAKE 3.81,這已經在兩個完全獨立的環境中測試過了。我調用「make -q」,然後makefile調用「$(MAKE)-C sub/a /」,然後makefile調用「$(MAKE)-f ../../makefile.b」

該測試用例儘可能簡單。誰能告訴我,爲什麼我得到這個錯誤:

nachum:/home/nachum/makefile_bug[1497]$make -q 
make -C sub/a 
make[1]: Entering directory `/home/nachum/makefile_bug/sub/a' 
make -f ../../makefile.b 
make[1]: *** [b] Error 1 
make[1]: Leaving directory `/home/nachum/makefile_bug/sub/a' 
make: *** [a] Error 2 
nachum:/home/nachum/makefile_bug[1498]$ 

下面是生成文件:

makefile: 
a: 
     $(MAKE) -C sub/a 

sub/a/makefile: 
b: 
     $(MAKE) -f ../../makefile.b 

makefile.b: 
all: 
     echo hi 

這個練習的要點是要能夠檢查是否子項目需要重新編譯,所以我必要時可以正確構建頂級項目。否則,我必須使用時間戳的一切。 (我以前使用過時間戳,但是我意識到這對其他事情造成了額外的困惑。)

這個問題有一些奇怪的解決方法。例如,如果一個(在生成文件)的配方具有調用$以上的額外線(MAKE),即:

makefile: 
a: 
     @echo hi 
     $(MAKE) -C sub/a 

的問題消失了,而依賴關係(在我的全測試用例)仍能正常工作。也直接使用make似乎改變了行爲(而不是$(MAKE))。

任何幫助,將不勝感激。 謝謝, Nachum

回答

0

您的問題是漫遊指定的-q選項。 -q將不運行命令,但如果是最新狀態,則退出狀態。當你使用${MAKE}make -q -C sub/a被執行。經過一些排列和組合後,我發現我們不能使用和-C選項。如果您想要使用make --quite或者您只想檢查時間戳,請嘗試-t(觸摸但不編譯)或'-n`(空運行)。

+0

聽起來像一個錯誤? – nachum 2013-03-24 19:10:46

+0

可能有可能是原因,我們還需要探討:) – 2013-03-25 11:08:52