BashのMakefileで文字列を使用するとうまくいかないのはなぜですか?

BashのMakefileで文字列を使用するとうまくいかないのはなぜですか?

私はMakefileの問題を解決しました。<<<エラーメッセージでどこを見てください。

/bin/sh: 1: Syntax error: redirection unexpected

理由を知りたいです。 (私はBashを使用していますSHELL

現在のプロジェクトでは、私は多くのレシピを試しました。

target:
    read FOO <<< "XXX"; \
    read BAR <<< "YYY"; \
    read BAZ <<< "ZZZ"; \
    someprog -a param0 -b $$FOO -c param1 -d $${BAR} -e param2 -f $${BAZ} >$@

<<<これを試みると、最初に説明したようにすべてのエラーが発生します。私の解決策は

target.dep:
    echo "XXX YYY ZZZ" >$@

target: %: %.dep
    read FOO BAR BAZ < $<;\
    someprog -a param0 -b $$FOO -c param1 -d $${BAR} -e param2 -f $${BAZ} >$@

これは私の内容を一時ファイルに入れてからreadを使用することを意味します<。これは素晴らしい動作します。 make出力を通常のbashプロンプトにコピーして貼り付けると<<<<<<なぜこれが起こるのですか?この文字列をMakefileで動作させる方法はありますか?

PS:はい、時々私はautotoolsがmakeよりも優れていると思います。

ベストアンサー1

/bin/sh: 1: Syntax error: redirection unexpected

あなたは意味いいえ反対の期待にもかかわらず、bashをシェルとして使用してください。 bashはshここで文字列をよく認識していますが(MakefileFedoraで作業できるように)、たとえばdashはshそうではありません。特に指定しない限り、Makeはデフォルトの/bin/shユーザーシェルを無視します。

環境

SHELL=/bin/bash

あなたはMakefileあなたのために問題を解決しなければなりません。少なくともあなたと同じ症状を示すシステムでは私に役立ちました。

PS:はい、時々私はautotoolsがmakeよりも優れていると思います。

AutotoolsとMakeは同じ問題を解決せず、Autotoolsを使用することはまだMakeを使用していることを意味します。

おすすめ記事