62

何年もmakeを使用していなかった後、私は再びそれを必要としていることに気付きました。今はgnuバージョンです。自分のやりたいことができるはずなのに、どうしたらいいのかわからなかったり、グーグルなどで答えを見つけたりしていません。

プログラムを何度も実行し、結果をログファイルに保存するテストターゲットを作成しようとしています。一部のテストでは、プログラムが中止されるはずです。残念ながら、私のmakefileは最初のテストで中止され、エラーが発生します。私は次のようなものを持っています:

# Makefile
# 
test:
        myProg -h > test.log              # Display help
        myProg good_input >> test.log     # should run fine
        myProg bad_input1 >> test.log      # Error 1
        myProg bad_input2 >> test.log      # Error 2

上記の場合、makeはbad_input1の実行後に終了し、bad_input2の実行には到達しません。

4

3 に答える 3

118

コマンドの前にa を置きます-。例:

-myProg bad_input >> test.log

GNU make は、プロセスの終了コードを無視します。

于 2010-02-02T22:53:15.060 に答える
30

として実行してみてください

make -i

また

make --ignore-errors

すべてのルールのすべてのエラーを無視します。

次のように実行することもお勧めします

make -i 2>&1 | tee results

すべてのエラーと出力を取得して、何が起こったかを確認できます。

エラーが発生した後もやみくもに続行することは、おそらく本当にやりたいことではありません。make ユーティリティは、その性質上、通常、以前のコマンドの正常な完了に依存しているため、それらのコマンドのアーティファクトを後で実行するコマンドの前提条件として使用できます。

ところで、make に関する O'Reilly の本のコピーを入手することを強くお勧めします。第 1 版では、make の基本的な性質、特に後方連鎖の動作について優れた概要が説明されています。それ以降の版はまだ良いですが、最初の版です。実際に何が起こっているかについての最も明確な説明がまだあります。実際、私のところに来て make について「何?質問」する人には、私自身のコピーを最初に渡します。(-:

于 2010-02-02T23:09:16.847 に答える
17

ターゲットを失敗させたい場合の適切な解決策は、その終了コードを無効にすることです。

# Makefile
# 
test:
    myProg -h > test.log              # Display help
    myProg good_input >> test.log     # should run fine
    ! myProg bad_input1 >> test.log      # Error 1
    ! myProg bad_input2 >> test.log      # Error 2

現在、これら 2 つのケースで成功するのはエラーです。

于 2014-02-21T13:24:28.590 に答える