makefile:4:***缺少分隔符。停止

时间:2013-06-05 04:48:50

标签: c makefile

这是我的makefile:

all:ll

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

clean :
  \rm -fr ll

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

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

我该如何解决?

14 个答案:

答案 0 :(得分:708)

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

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

它显示带有^I的标签的存在,以及带有$的行结尾对于确保依赖关系正确结束以及制表符标记规则的操作至关重要,以便它们可以轻松识别效用.....

示例:

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 :$
   \rm -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

希望这会有所帮助!!

答案 1 :(得分:25)

您应该始终在“标签”之后写入命令,而不是空格。

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

也用“rm -fr ll”替换\ rm -fr ll。在此命令之前插入标签

答案 2 :(得分:20)

在VS Code上,只需点击&#34; Space:4&#34;在编辑Makefile时,在右下角并将其更改为选项卡。

答案 3 :(得分:5)

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

 %-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$

答案 4 :(得分:5)

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

  1. 打开Preferencescmd + ,
  2. 转到Plugins-> Marketplace
  3. 搜索Makefile support,安装并重新启动IDE。

这应该可以解决问题,并提供Makefile的语法。

答案 5 :(得分:4)

关键点是&#34; HARD TAB&#34; 1.检查是否使用了TAB而不是空格 2.检查.vimrc中的&#34;设置tabstop = X&#34;

答案 6 :(得分:4)

TLDR;

makefile 的语法可能很古怪
如果您希望将一行代码解释为 make 代码,它必须仅使用 空格 缩进。
如果您希望将一行代码解释为 bash 代码,它必须仅使用 制表符

缩进
sometask:
  ifeq($FOO,bar)   // this is make code. only spaces
    echo "foobar"  // this is bash code. only tabs
  endif            // again, this is make code. only spaces

从技术上讲,它是决定解释器的主要缩进。

答案 7 :(得分:2)

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

<强> gedit-&GT;编辑 - &GT;首选项&GT;编辑

并删除检查

用空格替换标签

答案 8 :(得分:1)

如果您中的任何人正在使用Intellij的产品,则解决方案如下:

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

答案 9 :(得分:1)

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

答案 10 :(得分:1)

为了简单起见,使用 -A 或 --show-all 来显示所有内容。

答案 11 :(得分:0)

使用.editorconfig自动修复标签:

root = true

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

[Makefile]
indent_style = tab

答案 12 :(得分:0)

如果要在Eclipse中编辑Makefile:

Windows-> Preferences->General->Editor->Text Editors->Show Whitespace Characters -> Apply

或使用下面显示的快捷方式。

选项卡将用灰色“ >>”表示,空格将用灰色“”表示。如下图所示。

enter image description here

答案 13 :(得分:-4)

您的Linux版本不支持这种功能,请使用其他合适的版本,例如Kali Linux或 Red Hat