2016-05-10 8 views
0

testコマンドを使用して失敗します問題。 誰かがこの問題を解決するのに手伝ってもらえますか?私はこれがbash/Makefileターゲットのバグであることを願っています。Makefileの偽のターゲットはMakefileのための次のような単純な偽のターゲットが失敗している

+2

は、あなただけの 'の/ etc以来、test''の終了ステータスを取得されていません/ fstab'はおそらく存在するでしょうか?あなたは何をしようとしているのですか? – chepner

+0

問題の内容を正確に説明してください。その後、私たちはそれを整理するのを手伝うことができます。すべてが私にとって正しく働いているように見えます。 – MadScientist

+0

はい、私はそれをしようとしています。私は/ etc/fstabが常に存在することを知っています。しかし、終了したファイルの場合、このチェックは「make:[インストール]エラー1(無視)」エラーを表示します。 –

答えて

0

あなたのレシピ:$(dir)/$(file)が存在しないと が$(dir)/$(file)が存在する場合(非ゼロを返す)失敗した場合

-test ! -f $(dir)/$(file) 

は(リターン0)を成功します。 - の接頭辞のために、makeは失敗を無視します。デフォルトでは、それは失敗を無視していると報告し、停止する代わりに を実行します。

ルック:

Makefileの

dir=/etc 
file=fstab 

.PHONY: all install 

all: install 
    echo "Success" 

install: 
    -test ! -f $(dir)/$(file) 

を実行し、それは:

$ make 
test ! -f /etc/fstab 
Makefile:8: recipe for target 'install' failed 
make: [install] Error 1 (ignored) 
echo "Success" 
Success 

bashが壊れていません。 makeは壊れていません。何も悪いことはありません。

あなたも、あなたがそれらを黙らでき その後、makeのprogessと診断出力を表示したくない場合は、次の

$ make --silent 
Success 
+0

これは、ファイルが存在することを意味します。つまり、testコマンドは0を返し、エラーメッセージ(make:[install] Error 1(ignored))を返します。私が間違っているなら、私を訂正してください。 –

+0

いいえコマンドが0を返した場合は成功し、0以外の場合は が返されます。 (これは特有の 'make'解釈ではありません:UNIXのようなOS、そのシェル、コマンド、システムコールの解釈は時間の始まり以来です)' test'コマンドはファイルが存在するため失敗し、1を返します。 Makeは '-'接頭辞のためにそのエラー(戻りコード1)を無視します。それはそのエラーを無視していると報告し、それは続けます。 –

+0

デフォルトで--silentをどのように実行するのですか? – dlite922

関連する問題