makefile отсутствует разделитель - PullRequest
4 голосов
/ 02 ноября 2009

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

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 голосов
/ 02 ноября 2009

Попробуйте так:

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 или что-то отличное от пустой строки)

4 голосов
/ 29 ноября 2011

Если между ifeq и открытием кронштейна нет места, то также выдается то же предупреждение.

это должен быть ifeq ()

2 голосов
/ 02 ноября 2009

Я не знаю ни одного 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 голос
/ 02 ноября 2009

Я видел подобные проблемы, вызванные пустыми строками, которые не являются пустыми - они содержат символы табуляции или пробелы. Очистка всех пробелов в пустых строках может решить эту проблему.

Отредактировано для добавления : Перечитав ваш вопрос, я вижу, что это может быть не вашей конкретной проблемой, учитывая номер строки и код, который вы разместили, но это может быть проблемой для других, поэтому я оставлю свой ответить.

1 голос
/ 02 ноября 2009

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

1 голос
/ 02 ноября 2009

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

...