2009-11-02 61 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()