Відповіді:
Як зазначено в онлайн-посібнику , найпоширенішою причиною цієї помилки є те, що рядки відступають пробілами, коли make
очікуються символи вкладки.
target:
\tcmd
де \t
TAB (U + 0009)
target:
....cmd
де кожен .
являє собою SPACE (U + 0020).
Просто для посмішок, і якщо хтось інший зіткнеться з подібною помилкою:
У мене з’явилася сумнозвісна помилка "відсутній роздільник", оскільки я викликав правило, яке визначає функцію як
($eval $(call function,args))
а не
$(eval $(call function,args))
тобто, ($
а не $(
.
0x20
"простору", це правильно?
$
Для мене проблема полягала в тому, що я мав деякі # ...
коментарі в кінці рядка, вбудовані в визначення define ... endef
багаторядкової змінної. Видалення коментарів призвело до усунення проблеми.
define
директиви розглядаються буквально. Насправді поведінка не пояснюється в документації . (Для наочності: Вставлення знака числа #
в директиву саме по собі не є синтаксичною помилкою. Але це просто не трактується як початок коментаря, тому це,
У моєму випадку помилка, викликана наступною. Я намагався виконувати команди глобально, тобто поза будь-якою ціллю.
UPD. Для запуску команди в усьому світі необхідно правильно сформуватися. Наприклад команда
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
стане:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
У моєму випадку я фактично пропускав вкладку між ними ifeq
та команду в наступному рядку. Пробілів там не було для початку.
ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Повинно було:
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Зауважте, що <tab>
це фактичний символ вкладки
У мене був відсутній розділовий файл у Makefiles, згенерований qmake. Я переносив код Qt на іншу платформу. У мене не було встановлено QMAKESPEC і MAKE. Ось за посиланням я знайшов відповідь:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
Отож, мабуть, мені все було потрібний пакет "build-basic", потім спочатку запустити autoconf
, який зробив той Makefile.pre.in
, ./configure
потім той, make
який працює ідеально ...
Наступний код 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