コマンドが失敗した場合は、作成を中断せずに終了ステータスを確認してください。

コマンドが失敗した場合は、作成を中断せずに終了ステータスを確認してください。

私はコマンドが失敗してもGNU Make 3.81が停止しないように指示しようとしています(それでコマンドの前にそれを付けました-)。ただし、次のコマンドの終了ステータスを確認してより多くの情報を印刷したいと思います。しかし、以下のMakefileは失敗します。

$ cat Makefile 
all:
    -/bin/false
    ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
$
$ make
/bin/false
make: [all] Error 1 (ignored)
([ $? -eq 0 ] && echo "success!") || echo "failure!"
success!

上記のMakefileが「失敗!」代わりに「成功!」をエコーするのはなぜですか?

修正する:

許可された回答に従い、拡張すると、次のように書かれます。

failure:                                                                                                                                                                                                                                      
    @-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"                                                                                                                                                                 
success:                                                                                                                                                                                                                                      
    @-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"     

ベストアンサー1

ルールの各更新コマンドは、Makefile別々のシェルで実行されます。したがって、以前に失敗したコマンドの終了ステータスは含まれず、$?新しいシェルのデフォルト値です。$?これが[ $? -eq 0 ]テストが常に成功する理由です。

おすすめ記事