Recibo el siguiente error en ejecución make
:
Makefile:168: *** missing separator. Stop.
¿Qué está causando esto?
Como se indica en el manual en línea , la causa más común de ese error es que las líneas están sangradas con espacios cuando se make
esperan caracteres de tabulación.
target:
\tcmd
donde \t
está TAB (U + 0009)
target:
....cmd
donde cada uno .
representa un ESPACIO (U + 0020).
Solo por sonrisas, y en caso de que alguien más se encuentre con un error similar:
Obtuve el infame error "separador faltante" porque invoqué una regla que define una función como
($eval $(call function,args))
más bien que
$(eval $(call function,args))
es decir, en ($
lugar de $(
.
0x20
"espacio" allí, ¿es correcto?
$
Este es un error de sintaxis en su Makefile. Es bastante difícil ser más específico que eso, sin ver el archivo en sí, o partes relevantes del mismo.
Para mí, el problema era que tenía algunos # ...
comentarios de fin de línea integrados en una define ... endef
definición de variable de varias líneas. Eliminar los comentarios hizo que el problema desapareciera.
define
directiva son tratados literalmente. En realidad, el comportamiento no se explica en la documentación . (Para mayor claridad: Incorporación de un signo de número #
. Dentro de la Directiva no es en sí un error de sintaxis Pero simplemente no se interpreta como un inicio de un comentario, para hacer eso es ciertamente propenso a errores.)
Mi error fue en una línea de declaración variable con una extensión de varias líneas. Tengo un espacio final después de "\" que hizo que la continuación de una línea no válida.
MY_VAR = \
val1 \ <-- 0x20 there caused the error.
val2
En mi caso, el error causado a continuación. Intenté ejecutar comandos globalmente, es decir, fuera de cualquier objetivo.
UPD Para ejecutar el comando globalmente, uno debe estar formado correctamente. Por ejemplo comando
ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME
se convertiría:
$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
En mi caso, se produjo el mismo error porque :
faltaban dos puntos al final como en staging.deploy:
. Tenga en cuenta que puede ser un error de sintaxis fácil.
En mi caso, en realidad me faltaba una pestaña en el medio ifeq
y el comando en la siguiente línea. No había espacios para empezar.
ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Debería haber sido:
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Tenga en cuenta que <tab>
es un carácter de tabulación real
En mi caso, este error fue causado por la falta de un mero espacio. Tuve esto si bloque en mi archivo MAKE:
if($(METHOD),opt)
CFLAGS=
endif
que debería haber sido:
if ($(METHOD),opt)
CFLAGS=
endif
con un espacio después de si.
Me faltaba el archivo separador en Makefiles generado por qmake. Estaba portando el código Qt a una plataforma diferente. No tenía QMAKESPEC ni MAKE set. Aquí está el enlace encontré la respuesta:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
Aparentemente, todo lo que necesitaba era el paquete "build-essential", luego ejecutar autoconf
primero, lo que hizo que Makefile.pre.in
, ./configure
luego el make
que funciona perfectamente ...
El siguiente código Makefile funcionó:
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