条件演算子を使用してレシピを実行中にエラーが発生しました。

条件演算子を使用してレシピを実行中にエラーが発生しました。

私のMakefileはとても簡単です。

all:
      [ -f MyFile ] && echo "MyFile exists"

もちろん、レシピラインはタブ文字で始まります。 MyFileファイルが存在する場合、すべてが正常です。ただし、ファイルが現在のディレクトリにない場合は、次の結果が表示されます。

Makefile:2:ターゲット「all」のレシピが失敗しました。 make: *** [all] エラー 1

ifステートメントを使用してこのエラーを削除できます。

all:
      if [ -f MyFile ]; then echo "MyFile exists"; fi

どちらのステートメントも make 外の sh と bash でうまく動作します。条件演算子を使用すると、makeエラーの原因が何であるかわかりません。アイデアはどうなりましたか?

ベストアンサー1

[ -f MyFile ] && echo "MyFile exists"

MyFile存在しない場合は、ゼロ以外のステータスコードで終了します。

if [ -f MyFile ]; then echo "MyFile exists"; fi

MyFileない限り、成功(0)ステータスコードで終了します。そして echo書き込みエラーのため失敗しました。

Makeはステータスコードを使用してコマンドが失敗したことを確認し、コマンドが失敗した場合はデフォルトで実行を停止します。個々のコマンドラインにプレフィックスを追加してこの機能を無効にしたり、-特殊make -iターゲットを実行または指定して.IGNORE全体を無効にしたりできます。だから

-[ -f MyFile ] && echo "MyFile exists"

Makeが続行することを許可しますが、MyFile存在しない場合はメッセージを印刷します。

make: [Makefile:14: test] エラー 1 (無視)

|| true模様この特定の場合でも機能しますが無視されますecho。 falseの場合、if condition; then command; fiMakeは停止しませんが、エラーを考慮し、すべてのエラーは無視されます。conditioncommandcondition && command || true

おすすめ記事