关于C#:makefile:4:***缺少分隔符。 停止

makefile:4: *** missing separator. Stop

这是我的makefile:

1
2
3
4
5
6
7
8
all:ll

ll:ll.c  
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<

clean :
 
m -fr ll

当我尝试make cleanmake make时,我收到此错误:

1
:makefile:4: *** missing separator.  Stop.

我该如何解决?


makefile与制表符有非常愚蠢的关系,每个规则的所有操作都由制表符标识......而No 4空格不制作制表符,只有制表符制作标签...

检查我使用命令cat -e -t -v makefile_name

它显示了带有^I的选项卡和带有$的行结尾两者对于确保依赖关系正确结束以及选项卡标记规则的操作以使它们易于识别为make实用程序至关重要.....

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
Kaizen ~/so_test $ cat -e -t -v  mk.t
all:ll$      ## here the $ is end of line ...                  
$
ll:ll.c   $
^Igcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<$
## the ^I above means a tab was there before the action part, so this line is ok .
 $
clean :$
   
m -fr ll$
## see here there is no ^I which means , tab is not present ....
## in this case you need to open the file again and edit/ensure a tab
## starts the action part

希望这可以帮助 !!


你应该总是在"tab"之后写命令而不是空格。

这适用于您的情况下的"gcc"行(第4行)。你需要在gcc之前插入标签。

同样用"rm -fr ll"替换 rm -fr ll。也可以在此命令之前插入标签


在VS Code上,只需单击右下角的"Space:4",然后在编辑Makefile时将其更改为tab。


PyCharm的解决方案是安装Makefile support插件:

  • 打开Preferences(cmd + ,)
  • 转到Plugins - > Marketplace
  • 搜索Makefile support,安装并重新启动IDE。
  • 这应该可以解决问题,并为makefile提供语法。


    这是一个非常古老的问题,但我还想说一下使用vi/vim编辑器来查看选项卡的另一个选项。如果安装了vi/vim,则打开Makefile(例如vim Makefile)并输入:set list。这将显示如下插入的标签数量,

    1
    2
    3
    4
    5
    6
    7
    8
    9
     %-linux: force$
    ^I@if ["$(GCC_VERSION)" ="2.96" ] ; then \$
    ^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
    ^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
    ^Ielse \$
    ^I^Iecho ===== Generating build tree for $@ architecture =====; \$
    ^I^I$(CONFIGURE) $(CWD) $@; \$
    ^Ifi$
    ^Icd build-$@;make$

    关键点是"HARD TAB"
    1.检查是否使用了TAB而不是空格
    2.检查.vimrc中的"set tabstop = X"


    使用.editorconfig自动修复选项卡:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    root = true

    [*]
    charset = utf-8
    end_of_line = lf
    insert_final_newline = true
    indent_style = space
    indent_size = 4

    [Makefile]
    indent_style = tab

    如果您使用mcedit进行makefile编辑。你必须看到以下标记。
    enter image description here


    如果你们中的任何人使用的是Intellij的产品,那么解决方法就是:

  • 转到首选项>编辑器>代码样式
  • 在这里,您需要选择与您的问题相关的文件类型。但很可能你需要选择Other File Types
  • 在打开的选项卡中标记Use tab character的复选框并注意,Tab sizeIndent值必须为4。

  • 这是因为tab被空格替换。
    要禁用此功能,请转到

    gedit->编辑 - >首选项 - >编辑

    并删除检查

    "用空格替换标签"