2017-07-14 7 views
0

これは、.IGNOREディレクティブのために無視されても迷惑です。 $(ベース名$ <).errが存在しない場合、エラーが表示されます。レシピ内の行は次のようになります。メイクファイルのダブルアンパサンド(&&)はエラーを返します

[ -r "$(basename $<).err" ] && mv -f $(basename $<).err anotherName.err 

私は角括弧テストがを返し、これはエラーとしてメイクによって解釈されると思います。

答えて

1

テストが失敗し、式を0(偽)以外の終了コードで終了させると、エラーが解釈されます。

あなたはテスト反転させることができ、次のいずれか

[ ! -r "$(basename $<).err" ] || mv -f $(basename $<).err anotherName.err 

あるいは "else true" を追加:

[ -r "$(basename $<).err" ] && mv -f $(basename $<).err anotherName.err || true 
+0

グレート!!を。それはうまくいった。私は** ||を使いました。本当の**最後には読みやすさを維持するために。 –

+0

ところで、その前に私はこのコマンドをシェルの中に入れようとしました**このように、** mv -f **はファイルがしても起こらないという結果でした存在する。それは不思議です、私はそれについての説明がありません。 –

+0

あなたが実際に行った変更を確認する必要があります。しかし、一般的には、レシピの中で '$(shell ...) 'を使うのは良い考えではありません。 makeによって評価されるものとシェルによって評価されるものが混在していることは既に分かります。makeで評価される新しいレイヤーを追加し、残りがシェルによって評価される前のシェルはちょうど狂気です。 – MadScientist

関連する問題