2014-10-11 240 views
2

我需要先了解makefile的語法,然後再對其進行修改以符合我自己的需要。通過網絡搜索我已經能夠了解它的大部分,但最後一部分給我一個語法錯誤:Makefile語法錯誤。缺少分隔符

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

線119是這裏的第一個:

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

我真的不明白什麼是在這最後的行正在做,我似乎無法找到我需要的GNU使手冊中的信息,

感謝

+0

@Mat試圖提供一個編輯,絕望! _ @ D1X_請注意,對於makefile語法,「TAB」**是相關的**。它將行爲與規則分開。 – 2014-10-11 19:51:05

+0

對不起,我知道TAB與Makefile語法有關,我只是在Stackoverflow中新增了一個。我認爲現在已經解決了。謝謝。 – D1X 2014-10-11 20:05:30

+0

@ D1X _「我確實知道TAB與Makefile的語法有關......」如果你的makefile文本像你所顯示的那樣是逐字的,你沒有'TAB'(至少4個空格)到分開行動。 – 2014-10-11 20:09:59

回答

1

既然你從你的實際的Makefile剪切和粘貼很難給予一定的答案。如果您提供的第一行rm -rf $(CLEANFILES)確實是第119行,並且makefile在此之前是有效的,那麼很可能您在rm -rf $(CLEANFILES)之前沒有TAB。它應該是這樣的:

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

也就是說,在每個配方的命令行必須在該行的開頭文字製表符。