Makefile文件缺少分隔符。

4

我有一个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个回答

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 不为空(即定义为 TRUE、是、1 或其他非空字符串)


5
如果ifeq和圆括号之间没有空格,也会导致相同的警告。应该是ifeq()。

2

我不知道有任何一种 make 方言允许使用 if 关键字。你引用的代码既不是 POSIX make,也不是 GNU make。

可行语法的示例包括:

ifdef have_sdl
... (rest is the same)

并且

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

.


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

1

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


是的 - 它充满了GNU make-isms,不使用GNU make会出现该错误。 - Jonathan Leffler

1
我曾经见过这样的问题,由于不是空白行而是包含制表符或空格的空白行所引起。清除所有空白行上的空格可能会解决它。
编辑后添加:重新阅读您的问题后,我发现这可能不是您特定的问题,因为您发布的行号和代码,但对于其他人来说,这可能是一个问题,所以我会保留我的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接