2012-03-11 5 views
6

私のC++プロジェクト用のmakefileの一部は、diffコマンドを使用して、最近ビルドされたコードによって出力された2つのファイルを比較します。問題は、ファイルが異なる場合、失敗しなかったスクリプトを続行する必要があることです。比較する必要のあるファイルがさらにあり、ビルドスクリプトが終了する前にそれらをすべて確認する必要があります。たとえば、次のようなものがあります。異なるファイルにdiffを使用するとMakefileが失敗する

diff: * 
     diff $(TEST)/T4.board $(TEST)/T4.board 
     diff $(TEST)/T4.board $(TEST)/sample.board 

ファイルが同じであるため、最初の行は問題ありません。 2行目は異なるファイルを比較し、相違点が表示されたら

Makefile:102: recipe for target `diff' failed 
make: *** [diff] Error 1 

となり、スクリプトが停止します。どうすればそれを続けることができますか?

+0

'diff'が失敗に成功し、1に0を返す必要があります。問題はどうすれば失敗に対処できますか?私は1週間ほどメイクファイルを使用しています。 – gsingh2011

答えて

5

はあなたの全体のレシピがエラーを返さないようにしてください:

diff: * 
    diff $(TEST)/T4.board $(TEST)/T4.board  || exit 0 
    diff $(TEST)/T4.board $(TEST)/sample.board || exit 0 

一つではなくexit 0echo 'Files differ'を使用することができます。

+0

ありがとう、両方のオプションが動作します。メイクファイルにはエラーを無視するオプションはありませんが、それはちょっとばかだと思います。 'diff'のようなものについては、1を返すことは世界の終わりではなく、すべてのdiffの最後に出口0を追加すると迷惑になることがあります。 – gsingh2011

+1

@ gsingh2011:メークファイルにはエラーを無視するオプションがあります。私の答えを見てください。 – thiton

+0

@ gsingh2011ああ、私はそれを忘れていました。コマンドの前にマイナス記号( '-')をつけて、終了コードを無視することができます。 thitonの答えを参照してください。 –

7

GNUがsection 5.5 "Errors"で手動の状態を作るとして、あなたは-にコマンドを付けることによって、コマンドの戻りステータスを無視することができます。

diff: * 
    -diff $(TEST)/T4.board $(TEST)/T4.board 
    -diff $(TEST)/T4.board $(TEST)/sample.board 
+0

+1、私はGNU Makeのエラーを抑制するそのようなネイティブな方法を忘れていました。 –

関連する問題