首页 > 解决方案 > GNU makefile 中的“文件过早结束”是什么意思?

问题描述

我正在尝试在makefile中练习if语句,但它一直说文件过早结束。代码:

test_rule:
   if  [ yes ]
       echo "if works"
   endif

输出:

make test_rule
/bin/sh: -c: line 1: syntax error : premature end of file
make: *** [Makefile:13: test_rule] Error 1

我尝试在线使用大量代码(例如将 [] 替换为 () 或在 echo 前添加 @),但没有任何效果。

标签: clinuxmakefilegnu-make

解决方案


正如手册所解释的,您需要使用标签(默认情况下):

请注意:您需要在每个配方行的开头放置一个制表符!这是一个晦涩难懂的东西。如果您喜欢在食谱前加上制表符以外的字符,则可以将.RECIPEPREFIX变量设置为备用字符(请参阅特殊变量)。

因此,您需要编写:

foo:
    gcc

换句话说,就是字符串foo:\n\tgcc\n

请注意,StackOverflow 在渲染 Markdown 时会将制表符转换为 4 个空格(但如果您尝试编辑此答案,您将看到制表符字符)。


推荐阅读