.make とパイプに対する DELETE_ON_ERROR アクション

.make とパイプに対する DELETE_ON_ERROR アクション

ルールが失敗した場合、ターゲットは.DELETE_ON_ERRORmake にターゲットを削除するよう指示します。ただし、終了ステータス値は$?パイプラインの最後のプログラム値を保持するため、パイプラインでは機能しません。たとえば、次の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に変更されました。)

おすすめ記事