49

Linux ツールを実行しているときに、makefile ルールが適用されます。ツール コマンドの終了ステータスを確認する必要があります。そのコマンドが失敗した場合は、make を中止する必要があります。

$?、$$?で確認してみました。\$? メイクファイルなど。しかし、makefile の実行時に構文エラーが発生します。

これを行う正しい方法は何ですか?

Makefileの関連するルールは次のとおりです

    mycommand \
    if [ $$? -ne 0 ]; \
    then \
        echo "mycommand failed"; \
        false; \
    fi
4

4 に答える 4

72

メイクファイルで-:

mycommand || (echo "mycommand failed $$?"; exit 1)

makefile アクションの各行は、新しいシェルを呼び出します。エラーは、コマンドが失敗したアクション行でチェックする必要があります。

mycommand が失敗すると、ロジックは echo ステートメントに分岐してから終了します。

于 2013-05-01T08:49:03.660 に答える
3

makeツールがゼロ以外のステータスで終了した場合に中止することだけが必要な場合はmake、デフォルトですでに中止されています。

Makefile

a: b
    @echo making $@
b:
    @echo making $@
    @false
    @echo already failed

. これは私ので何が起こるかmakeです:

$ make
making b
make: *** [Makefile:6: b] Error 1

失敗した場合に備えて、部分的または完全に作成されたターゲットが削除されていることを確認してください。たとえば、これ

a: b
    @gena $+ > $@
b:
    @genb > $@

は正しくありません: 最初の試行でgenb失敗した場合、おそらく誤った が残りb、2 回目の試行でmake正しいと見なされます。したがって、次のようなことをする必要があります

a: b
    @gena $+ > $@ || { rm $@; exit 1; }
b:
    @genb > $@
于 2017-06-02T11:06:17.080 に答える