私はbashでmakefileを書いていますが、ファイルが存在するかどうかを見つけようとするターゲットがあり、構文は正しいと思いますが、それでもエラーが発生します。
これが私が実行しようとしているスクリプトです
read:
if [ -e testFile] ; then \
cat testFile\
fi
私はタブを使用しているので、それは問題ではありません。
エラーは次のとおりです(「makeread」と入力すると)
if [ -e testFile] ; then \
cat testFile \
fi
/bin/sh: Syntax error: end of file unexpected (expecting "fi")
make: *** [read] Error 2
cat testFile
の後にセミコロンを追加してみてください。例えば:
read:
if [ -e testFile ] ; then cat testFile ; fi
あるいは:
read:
test -r testFile && cat testFile
私は同じ問題に遭遇しました。これはそれを行う必要があります:
file:
@if [ -e scripts/python.exe ] ; then \
echo TRUE ; \
fi
GNU Make 3.82なので、ファイルの先頭に.ONESHELL:
を追加して、ターゲット内のすべての行を単一のシェルで実行するようにmakeに指示できます。
.ONESHELL:
Shell := /bin/bash
foobar:
if true
then
echo hello there
fi
ドキュメント を参照してください。
行の前に@
を付けるか、.SILENT:
の下に.ONESHELL:
オプションを追加して、エコーする行を抑制します。
私もこの問題に遭遇しました。
その理由は、「\」の後にコメントを追加したためです。