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です。
問題は、シェルが引用符の外側の_$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
とは異なる問題が発生します。