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


472

这是我的makefile:

all:ll

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

clean :
  \rm -fr ll

当我尝试make clean或时make make,出现此错误:

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

我该如何解决?


5
您可以使用.RECIPEPREFIX更改字符用法。请参阅:gnu.org/software/make/manual/html_node/...
ASEQ

2
这怎么没有作为重复关闭???Make错误的
jww

在mcedit的“选项->常规”中,请确保“假半标签”在该选项前的方括号中没有“ X”。
JovanRužić19年

Answers:


989

makefile与选项卡具有非常愚蠢的关系,每个规则的所有操作均由选项卡标识。不,四个空格不能构成标签,只有一个标签可以构成标签。

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

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

例:

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

8
“ cat -e -t -v makefile_name”是最好的选择。曾经 我一直盯着屏幕,看到看起来像标签的东西,完全没有想到整个文件中的一行是使用空格而不是硬标签。
arinmorf'2

非常感谢!我一直在编译大型项目的源代码。makefile从教程中粘贴了几行,但没有用。只有删除空格并放入后才Tab起作用!
rzaaeeff

使用vi(或vim)编辑器从一个makefile复制/粘贴到另一个makefile时,请确保不要不小心抓住代表文件结尾的〜(波浪号)行。真实的〜看起来像vi标记,将导致“ ***分隔符丢失。停止。” 错误。这看起来似乎很明显,但是当它偶然发生时,它还远非显而易见。有关更多信息,请参见我的博客评论
斯科特

3
-vcat命令选项是多余的,因为-e手段-vE-t手段-vT
xxks-kkk,2016年

2
如果有人使用替换标签的编辑器,请使用以下标签字符,然后从此处复制粘贴:。
伊万·波什乔夫

32

在VS Code上,只需单击右下角的“空格:4”,然后在编辑Makefile时将其更改为选项卡。


1
我什至没有注意到那里-感谢您提供的信息。我以前使用的是正则表达式查找替换,但这好多了。
花生

VS Code识别出从无后缀“ Makefile”中提取的我的“ common.mk”文件是一个make文件,并正确突出显示了该文件-但开始悄悄地缩进了空格而不是制表符。
弗朗西斯·诺顿

谢谢您的帮助!我绝对没有注意到在该底角有一个选项卡设置。
se_brandon

28

您应该始终在a后面Tab而不是空白后面写命令。

这适用gcc于您的情况下的第4行。您需要在之前插入制表符gcc

还要替换\rm -fr llrm -fr ll。在此命令之前也插入标签。


3
非常清楚,每个逻辑配方行中必须有一个硬TAB字符作为第一个字符。在TAB之后,您可以添加所需的任何空白。
MadScientist 2013年

制表符应该等于2还是4?在/.vimrc中设置tabstop = 2或4?
拉胡尔·雷迪

@RahulReddy编辑器如何显示选项卡与配置中是否存在选项卡字符无关。
xaxxon

很好的提示,因为我前面有空格。当我检查它的工作。精湛的:)
indianwebdevil19年

9

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

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

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


这也有助于GoLand
Vizjerei

我发现IDE确实很重要。pycharm不支持​​Tab版本。当我更改为ATOM时,TAB输入有效。
月光骑士

6

它是一个相当老的问题,但是我仍然想使用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$

6

使用.editorconfig,自动将修复标签:

root = true

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

[Makefile]
indent_style = tab

4

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


2

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

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

2

如果您使用mcedit进行makefile编辑。您必须看到以下标记。 在此处输入图片说明


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.