Ошибка: отсутствует разделитель

Я получаю следующее сообщение об ошибке make:

Makefile:168: *** missing separator.  Stop.

Что вызывает это?

Ответы

Ответ 1

Как указано в онлайн-руководстве, наиболее распространенной причиной этой ошибки является то, что строки начинаются с пробелов, когда make ожидает символы табуляции.

Правильный

target: 
\tcmd

где \t - TAB

Неправильный

target:
____cmd

где _ это один пробел.

Ответ 2

Просто для усмешек, и если кто-то другой столкнется с подобной ошибкой:

Я получил позорную ошибку "отсутствующего разделителя", потому что я вызвал правило, определяющее функцию как

($eval $(call function,args))

а не

$(eval $(call function,args))

то есть. ($eval $(call..., а не $(eval $(call....

Ответ 3

Это синтаксическая ошибка в Makefile. Трудно быть более конкретным, чем это, не видя самого файла или его соответствующую часть.

Ответ 4

Моя ошибка была в строке объявления переменных с многострочным расширением. У меня есть конечное пространство после "\", которое сделало это недопустимым продолжением строки.

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2

Ответ 5

Для меня проблема заключалась в том, что у меня были комментарии в конце строки # ..., встроенные в определение переменной строки define ... endef. Убрав комментарии, проблема исчезла.

Ответ 6

В моем случае ошибка следующая. Я пытался выполнять команды глобально, вне любой цели.

UPD. Чтобы выполнить команду глобально, необходимо правильно сформировать. Например команда

ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME

станет:

$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))

Ответ 7

В моем случае такая же ошибка была вызвана, потому что двоеточие : отсутствовало в конце, как в staging.deploy: Обратите внимание, что это может быть простой синтаксической ошибкой.

Ответ 8

В моем случае эта ошибка была вызвана отсутствием простого пространства. У меня был блок if в моем make файле:

if($(METHOD),opt)
CFLAGS=
endif

который должен был быть:

if ($(METHOD),opt)
CFLAGS=
endif

с пробелом после if.

Ответ 9

По-видимому, мне нужен был пакет "build-essential", затем сначала запустить autoconf, который сделал Makefile.pre.in, затем ./configure затем make который отлично работает...

Ответ 10

Работает следующий код Makefile:

obj-m = hello.o

all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean