makefile:4: *** falta el separador. Detener
Este es mi archivo MAKE:
all:ll
ll:ll.c
gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<
clean :
\rm -fr ll
Cuando intento make clean
o make make
, aparece este error:
:makefile:4: *** missing separator. Stop.
¿Cómo puedo arreglarlo?
make define que se requiere una pestaña para iniciar cada receta . Todas las acciones de cada regla se identifican mediante pestañas. Si prefiere anteponer a sus recetas un carácter que no sea tabulador, puede configurar la variable .RECIPEPREFIX en un carácter alternativo.
Para comprobarlo, uso el comando cat -e -t -v makefile_name
.
Muestra la presencia de pestañas con ^I
y finales de línea con $
. Ambos son vitales para garantizar que las dependencias finalicen correctamente y que las pestañas marquen la acción de las reglas para que sean fácilmente identificables por la utilidad make.
Ejemplo:
Kaizen ~/so_test $ cat -e -t -v mk.t
all:ll$ ## here the $ is end of line ...
$
ll:ll.c $
^Igcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<$
## the ^I above means a tab was there before the action part, so this line is ok .
$
clean :$
\rm -fr ll$
## see here there is no ^I which means , tab is not present ....
## in this case you need to open the file again and edit/ensure a tab
## starts the action part
En VS Code, simplemente haga clic en "Espacio: 4" en la esquina inferior y cámbielo a pestaña cuando edite su Makefile.
De forma predeterminada, siempre debe escribir el comando después de un Tabespacio en blanco y no. Esto se puede cambiar a otro carácter con .RECIPEPREFIX
variable .
Esto se aplica a gcc
la línea (línea #4) en su caso. Necesitas insertar la pestaña antes gcc
.
Reemplace también \rm -fr ll
con rm -fr ll
. Inserte pestañas antes de este comando también.
TLDR;
La sintaxis del archivo Makefile puede ser peculiar.
Si desea que una línea de código se interprete como make
código, solo debe tener sangría con espacios .
si desea que una línea de código se interprete como bash
código, solo debe tener sangría con tabulaciones
sometask:
ifeq ($FOO,bar) // this is make code. only spaces
echo "foobar" // this is bash code. only tabs
endif // again, this is make code. only spaces
Técnicamente es la sangría inicial la que dicta el intérprete.
La solución PyCharm
sería instalar un Makefile support
complemento:
- Abierto
Preferences
(cmd + ,
) - Ir a
Plugins
->Marketplace
- Busque
Makefile support
, instale y reinicie el IDE.
Esto debería solucionar el problema y proporcionar una sintaxis para un archivo MAKE.