对于 Makefile 中的以下几行,我收到错误
Syntax error: end of file unexpected (expecting "then")
代码:
if [ ! -d upload-api/app-router/ ] then
git clone someRepo upload-api/app-router/
fi
我尝试在括号后加上分号,但仍然出现相同的错误
答案1
您需要将 then 放在下一行或使用分号
if [ ! -d upload-api/app-router/ ]
then
或者
if [ ! -d upload-api/app-router/ ];then
答案2
在 makefile 的上下文中,我看到两件事。
首先,你需要在 之前有一个分号或换行符then
。 的 Shell 语法if
如下:if commands... ; then commands... ; fi
(这里的任何分号都可以用换行符替换)。
其次,执行配方时make
,它会在单独的 shell 实例中运行配方的每一行,如果任何一行出现错误,它就会停止执行。实际上,它正在运行:
sh -c 'if [ ! -d upload-api/app-router/ ]; then' &&
sh -c 'git clone someRepo upload-api/app-router/' &&
sh -c 'fi'
...第一行有语法错误,无论有没有分号,因为if
永远不会完成。
因此,对于 makefile 配方,您需要告知make
它应将整个if ... fi
块视为一行。例如,使用反斜杠表示行延续,并在适当的位置使用分号,因为 shell 不会看到任何换行符。
my-target:
↦ if [ ! -d upload-api/app-router/ ] ; then \
↦ git clone someRepo upload-api/app-router/ ; \
↦ fi
这很快就会变得难以处理,因此我通常首选的解决方案是将 shellscript 放在单独的文件中,然后根据配方运行该文件。