2013-12-18 12 views
0

我有這樣的線在我的makefile:如何檢查,如果目錄中生成文件在執行命令之前存在

VERSION=0.7.12 
SED=sed 

ALL: www/Makefile 

www/Makefile: Makefile 
    test -d www && $(SED) -e "s/{{VERSION}}/$(VERSION)/g" www/Makefile.in > www/Makefile 

代碼執行文件時沒有www目錄,但我得到的消息:

make: *** [www/Makefile] Błąd 1 

運行make時(BLAD是波蘭的錯誤)

回答

1

請檢查退出代碼,如果它是不正確的(不爲0),那麼它失敗。在你的測試中,你使用「x & & y」,這意味着如果x不是真的,那麼y不會運行...但它也意味着表達式的結果是「不正確」。因此,讓顯示錯誤。

一般在makefile中您只想使用或表達式(||)不和表達式:

! test -d www || $(SED) ... 

或本:

test ! -d www || $(SED) ... 

或者,你可以這樣做:

test -d www && $(SED) ... || true 

(即使sed失敗,這個總是成功的。或者更簡單:

if [ -d www ]; then $(SED) ... ; fi 
相關問題