makefile缺少分隔符

时间:2009-11-02 20:00:11

标签: makefile compilation

我有一个makefile(由第三方提供),它给出了以下错误

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

6 个答案:

答案 0 :(得分: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

检查has_sdl是否为非空(意味着定义为TRUE,yes,1或除空字符串以外的其他内容)

答案 1 :(得分:4)

如果ifeq和支架打开之间没有空格,那么它也会引起相同的警告。

应该是ifeq()

答案 2 :(得分: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)

答案 3 :(得分:1)

如果我没记错的话,makefile-mode中的emacs会突出显示带有红色的空格语法错误。尝试在emacs中加载Makefile以查看错误是否明显。

答案 4 :(得分:1)

IIRC(已经有一段时间了)if / else是GNU makeism。如果你没有运行GNU make,那么这可能会失败。解决方案是安装GNU make。

答案 5 :(得分:1)

我看到这样的问题是由非空白的空行引起的 - 它们包含制表符或空格。清除空行上的所有空格可以解决它。

编辑添加:在重新阅读您的问题后,我发现根据您发布的行号和代码,这可能不是您的特殊问题,但这对其他人来说可能是一个问题所以我会离开我的回答。