我需要在修改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制作手册中找到所需的信息,
由于
答案 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字符。