Відповіді:
Як зазначено в онлайн-посібнику , найпоширенішою причиною цієї помилки є те, що рядки відступають пробілами, коли makeочікуються символи вкладки.
target:
\tcmd
де \tTAB (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