2017-05-18 14 views
0

私はMakefileの構文エラー:ファイルの末尾予期しない

define write_file 
for i in $(seq 1 10) 
do 
    echo "1234567" >> "tmp/test.txt" 
done 
endef 

そして

pre: 
    mkdir -p exe tmp 
    ${call write_file} 

で関数を定義しかし、私make pre、私はエラーを得たとき:

mkdir -p exe tmp
for i in
/bin/sh: 1: Syntax error: end of file unexpected

答えて

2

の各行をmake-recipeは、 新しいシェルで実行される単一のコマンドです(make)。したがって、マクロwrite_fileの本体を シェルコマンドにする必要があります。また

makeが定義または未定義make式として....を治療エスケープ形態$(....)、 のものを拡張します。したがって、 の場合、makeは、$(seq 1 10)を何も展開しません。 makeの処理を とし、シェルを展開して$(seq 1 10)とするには、代わりに$$と書いてmake、 の場合は$をエスケープする必要があります。シェルによって展開される予定の のメイクレシピの$についても同様です。一緒にこれらのポイントを置く

、あなたがしたい:

define write_file 
for i in $$(seq 1 10); \ 
do \ 
    echo "1234567" >> "tmp/test.txt"; \ 
done 
endef