makefile:4: *** falta el separador. Detener

Resuelto Rahul Reddy asked hace 11 años • 19 respuestas

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 cleano make make, aparece este error:

:makefile:4: *** missing separator.  Stop.

¿Cómo puedo arreglarlo?

Rahul Reddy avatar Jun 05 '13 11:06 Rahul Reddy
Aceptado

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 ^Iy 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
Nitin4873 avatar Jun 05 '2013 16:06 Nitin4873

En VS Code, simplemente haga clic en "Espacio: 4" en la esquina inferior y cámbielo a pestaña cuando edite su Makefile.

Alan avatar Jul 18 '2016 15:07 Alan

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 .RECIPEPREFIXvariable .

Esto se aplica a gccla línea (línea #4) en su caso. Necesitas insertar la pestaña antes gcc.

Reemplace también \rm -fr llcon rm -fr ll. Inserte pestañas antes de este comando también.

Denny Mathew avatar Jun 05 '2013 04:06 Denny Mathew

TLDR;

La sintaxis del archivo Makefile puede ser peculiar.
Si desea que una línea de código se interprete como makecódigo, solo debe tener sangría con espacios .
si desea que una línea de código se interprete como bashcó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.

WeezyKrush avatar Mar 05 '2021 18:03 WeezyKrush

La solución PyCharmsería instalar un Makefile supportcomplemento:

  1. Abierto Preferences( cmd + ,)
  2. Ir a Plugins->Marketplace
  3. Busque Makefile support, instale y reinicie el IDE.

Esto debería solucionar el problema y proporcionar una sintaxis para un archivo MAKE.

Tomasz Bartkowiak avatar Jan 08 '2019 16:01 Tomasz Bartkowiak