Makefile语法错误。缺少分隔符

时间:2014-10-11 19:42:49

标签: c++ makefile external libraries

我需要在修改makefile之前理解makefile的语法以满足我自己的需要。通过网络搜索我已经能够理解其中的大部分,但最后一部分是给我一个语法错误:

Makefile:119:***缺少分隔符。停止。

第119行是第一个:

        rm -rf $(CLEANFILES)
.cpp.o:
        $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<
.cpp.obj:
        $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`
.c.o:
        $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<
.c.obj:
        $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`

我并没有真正了解在最后几行中所做的事情,而且我似乎无法在GNU制作手册中找到所需的信息,

由于

1 个答案:

答案 0 :(得分:1)

由于您已从实际的Makefile中剪切并粘贴,因此很难给出一定的答案。如果您提供的第一行rm -rf $(CLEANFILES)确实是第119行,并且makefile在此之前有效,那么您可能在rm -rf $(CLEANFILES)之前没有TAB。它应该是这样的:

clean:
        rm -rf $(CLEANFILES)
.cpp.o:
        $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<
.cpp.obj:
        $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`
.c.o:
        $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<
.c.obj:
        $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`

也就是说,每个配方中的命令行必须在行的开头有一个文字TAB字符。