Risposte:
Come indicato nel manuale online , la causa più comune di tale errore è che le righe sono rientrate di spazi quando make
si prevedono caratteri di tabulazione.
target:
\tcmd
dove \t
è TAB (U + 0009)
target:
....cmd
dove ognuno .
rappresenta uno SPAZIO (U + 0020).
Solo per sorridere, e nel caso in cui qualcun altro incontri un errore simile:
Ho ricevuto il famigerato errore "separatore mancante" perché avevo invocato una regola che definisce una funzione come
($eval $(call function,args))
piuttosto che
$(eval $(call function,args))
cioè ($
piuttosto che $(
.
0x20
"spazio" lì, è corretto?
$
Questo è un errore di sintassi nel tuo Makefile. È abbastanza difficile essere più specifici di così, senza vedere il file stesso o le relative parti.
Per me, il problema era che avevo alcuni # ...
commenti di fine riga incorporati in una define ... endef
definizione di variabile multilinea. La rimozione dei commenti ha fatto scomparire il problema.
define
direttiva fossero trattati alla lettera. In realtà il comportamento non è spiegato nella documentazione . (Per chiarezza: l'incorporazione di un segno numerico #
all'interno della direttiva non è di per sé un errore di sintassi. Ma non è semplicemente interpretato come l'inizio di un commento, quindi è ammesso che sia soggetto a errori.)
Nel mio caso l'errore ha causato il prossimo. Ho cercato di eseguire comandi a livello globale, cioè al di fuori di qualsiasi target.
UPD. Per eseguire il comando a livello globale è necessario formarsi correttamente. Ad esempio comando
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
potrebbe diventare:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
Nel mio caso, in realtà mi mancava una scheda in mezzo ifeq
e il comando nella riga successiva. All'inizio non c'erano spazi.
ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Avrebbe dovuto essere:
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Nota che <tab>
è un vero carattere di tabulazione
Avevo il file di separazione mancante nei Makefile generato da qmake. Stavo trasferendo il codice Qt su una piattaforma diversa. Non avevo impostato QMAKESPEC né MAKE. Ecco il link che ho trovato la risposta:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
Quindi a quanto pare, tutto ciò di cui avevo bisogno era il pacchetto "build-essential", quindi eseguire autoconf
prima, che ha reso il Makefile.pre.in
, ./configure
poi il make
che funziona perfettamente ...
Il seguente codice Makefile ha funzionato:
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