web-dev-qa-db-ja.com

Makefileのシェルコマンドでechoを使用するにはどうすればよいですか?

GNU makefile があります。 Linux、Solaris、OS Xで正常に動作します。ただし、Cygwin-32、Cygwin-64、およびMinGWでは、次のように生成されます。

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo 2.0.4(0.287/5/3) | egrep -i -c "fc22.i686"'

行0はありません。そして、Fedora22のテストは実際には73行目で行われます。

IS_Fedora22_i686 = $(Shell echo $(RELEASE) | $(EGREP) -i -c "fc22.i686")

CygwinとMinGWで何が起こっているのですか?さらに重要なのは、どうすれば修正できますか?


ストレッチのように聞こえるので、ここにスクリーンキャプチャを示します。左上はMinGWです。センターはCygwin-32です。右下はCygwin-64です。

enter image description here

3
jww

問題は、シェルが引用符の外側の_$RELEASE_の括弧を認識しているため、それらを解釈しようとしていることです。試してみる2つのこと:$(RELEASE)への参照を二重引用符で囲み、 this ごとに_:=_を使用します。例えば:

_Shell:=/bin/bash.  #at the top of the makefile
IS_Fedora22_i686 := $(Shell echo "$(RELEASE)" | $(EGREP) -i -c "fc22.i686")
_

編集:name _-m_のようなスイッチでの出力には、通常、シェルのメタ文字はありません。同じ問題は、発生した変数でも発生する可能性があります。そのため、メイクファイルにShellを設定すると便利です。ユーザーがcshを実行している場合は、bashとは異なる問題が発生します。

3
cxw