2009-11-02 4 views
4

У меня есть Makefile (предоставленный третьей стороной), которая дает следующее сообщение об ошибкеMakefile отсутствует разделитель

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

линии в вопросе заключается в следующем, если заявление .... какие-либо идеи? попробовали различные замены вкладки с пробелами и не получили очень далеко на всех ...

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 не является пустым (значение, определенное в TRUE, да, 1 или что-то другое, чем пустая строка)

1

Если я правильно помню, в makefile-mode в emacs представлены самые пробельные синтаксические ошибки с красным. Попробуйте загрузить Makefile в emacs, чтобы узнать, очевидна ли ошибка.

1

IIRC (это было время), что если/else является манекеном GNU. Если вы не используете GNU make, это может сильно потерпеть неудачу. Решение - установить GNU make.

+0

Да - это нагруженные GNU Make-измов, а не с помощью GNU сделать бы придумать с этой ошибкой. –

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()

Смежные вопросы