语法错误:文件结束意外

时间:2017-05-18 13:40:53

标签: shell makefile gnu-make

我在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
  因为我在   / bin / sh:1:语法错误:文件结束意外

1 个答案:

答案 0 :(得分:1)

make-recipe的每一行都是make在一个单独运行的单个命令 新壳。所以你需要将宏write_file的主体变成一个单独的主体 shell命令。

此外,make扩展了未转义形式$(....)的所有内容, 将....视为已定义或未定义的make表达式。所以在你的 大小写,make$( seq 1 10 )扩展为空。阻止make做 并且让shell展开$( seq 1 10 ),您需要为$转义make, 您可以通过编写$$代替。制作配方中的任何$都是如此 你打算通过shell进行扩展。

将这些要点放在一起,你想要:

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