2009-11-02 60 views
4

我有一個生成文件(由第三方提供),它提供了以下錯誤生成文件缺少分隔

Makefile:108: *** missing separator. Stop. 

有問題的行是下面的if語句....任何想法?曾嘗試過各種替代用空格選項卡和沒有得到很遠在所有...

if have_sdl 
     libiulib_a_SOURCES += $(srcdir)/utils/dgraphics.cc 
     libiulib_a_SOURCES += $(srcdir)/utils/SDL_lines.cc 
     include_HEADERS += $(srcdir)/utils/SDL_lines.h 
else 
     libiulib_a_SOURCES += $(srcdir)/utils/dgraphics_nosdl.cc 
endif 

回答

5

試試這樣說:

ifneq ($(have_sdl),) 
     libiulib_a_SOURCES += $(srcdir)/utils/dgraphics.cc 
     libiulib_a_SOURCES += $(srcdir)/utils/SDL_lines.cc 
     include_HEADERS += $(srcdir)/utils/SDL_lines.h 
else 
     libiulib_a_SOURCES += $(srcdir)/utils/dgraphics_nosdl.cc 
endif 

此檢查have_sdl非空(意思是定義爲真,沒錯,1或大於空字符串以外的東西)

1

如果我沒有記錯,在makefile-modeemacs亮點空白語法錯誤用紅色。嘗試在emacs中加載Makefile以查看錯誤是否顯而易見。

1

IIRC(這已經有一段時間了)if/else是GNU makeism。如果你沒有運行GNU make,那麼這可能會失敗。解決方案是安裝GNU make。

+0

是的 - 這是滿載的GNU make-isms,而不是使用GNU make會出現該錯誤。 – 2009-11-02 20:10:08

1

我見過這樣引起的問題通過非空白的空行 - 它們包含製表符或空格。清除空白行上的所有空格可能會解決它。

編輯補充:在重讀你的問題,我看,這可能不是你的具體問題給予您發佈的行號和代碼,但它可能是其他人的麻煩,所以我會離開我的答案。

2

我不知道任何使方言允許if關鍵字。你引用的代碼既不是POSIX make,也不是GNU make。工作語法

實例包括:

ifdef have_sdl 
... (rest is the same) 

ifneq ($(have_sdl),) #not equal to empty string 
... (rest is the same) 

4

如果ifeq和托架開口之間沒有空間,那麼它也會導致相同的警告。

它應該是ifeq()