ルールが失敗した場合、ターゲットは.DELETE_ON_ERROR
make にターゲットを削除するよう指示します。ただし、終了ステータス値は$?
パイプラインの最後のプログラム値を保持するため、パイプラインでは機能しません。たとえば、次のmakefileは新しく作成されたファイルを削除しません。金持ち。
.DELETE_ON_ERROR:
foo:
false | true > foo
パイプラインのどの項目でも失敗する場合(たとえば、配列要素にゼロ以外の値がある場合など$PIPESTATUS
)、makeにルールを失敗として扱う方法はありますか?
ベストアンサー1
Bashを使用している場合は、パイプライン障害オプションをグローバルに設定することもできます。パイプラインの途中でもエラーを捉えるメイクファイルの先頭に一つがありました。
# Make sure any errors in the middle of a pipe cause the build to fail
SHELL=/bin/bash -e -o pipefail
(MadScientistのコメントに従って、/bin/shから/bin/bashに変更されました。)