Ошибка: отсутствует разделитель
Я получаю следующее сообщение об ошибке 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