在makefile的制作命令中出现错误:makefile:18: *** 缺少分隔符。停止。

50

对于以下复制下来的 makefile,我收到了缺少分隔符错误。 制表符似乎没有问题。

OBJS = driver.o snapshot.o
SHOBJS = malloc.o mymemory.o
CC = g++
DEBUG = -g
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
Snapshot: $(OBJS)
  $(CC) $(LFLAGS) $(OBJS) -o Snapshot
driver.o: snapshot.h driver.cpp
  $(CC) $(CFLAGS) driver.cpp
snapshot.o: mymemory.h snapshot.h snapshot.cpp
  $(CC) $(CFLAGS) snapshot.cpp
libmymemory.so: $(SHOBJS)
  gcc -shared -o libmymemory.so malloc.o mymemory.o
malloc.o: malloc.c
  gcc -fPIC -g -c -Wall malloc.c
mymemory.o: mymemory.cpp
 gcc -fPIC -g -c -Wall mymemory.cpp 
clean:
 \rm *.o *~ Snapshot
4个回答

87

第18行是gcc -fPIC -g -c -Wall mymemory.cpp。 Makefile 需要一个分隔符,通常是:。它没有将此行识别为命令。您的缩进有误:您在应该有制表符的地方使用了空格。

好的编辑器会突出显示以空格开头但看起来应该以制表符开头的 makefile 行。


5
看起来问题出在我的gedit上,我把Tab键设置成了空格,所以出现了bug。谢谢! - subramanian
10
别管那个糟糕的文本编辑器了——问题在于“make”太蠢了。 - Rob Agar

37

在makefile的某一行开头使用空格而不是tab字符时,我看到了这个错误信息。


7

这种情况通常发生在从互联网上复制粘贴代码的时候。使用删除键去除缩进行中的所有空格,然后按一次Tab键。

保存文件并再次运行。现在应该可以正常工作了。这对我有效。


4

我不确定它是否准确或者是因为将代码粘贴到网上导致的问题,但是文件中最后两个命令的缩进看起来比上面的命令要小。请仔细检查您的间距。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接