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

6 minutos de lectura

[*]
Raúl Reddy

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 makeme sale este error:

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

¿Cómo puedo arreglarlo?

  • Puede usar .RECIPEPREFIX para cambiar los usos del personaje. Ver: gnu.org/software/make/manual/html_node/…

    – aseq

    1 de diciembre de 2016 a las 9:30

  • ¿Cómo no se cerró esto como un duplicado? Posible duplicado de Make error: falta separador

    – jww

    24 de agosto de 2017 a las 16:32


  • En el mcedit “Opciones -> General”, asegúrese de que las “medias pestañas falsas” no tengan “X” entre corchetes antes de esa opción.

    – Jovan Ruzic

    21 de marzo de 2019 a las 3:53


  • ¡Gracias! ¡El medio espacio en MC era el problema!

    – Alexei

    30 sep 2021 a las 14:59

  • En vim, use: Ctrl+V + Tab

    – matthewpark319

    3 de diciembre de 2021 a las 4:21

avatar de usuario
AppleBee12

make tiene una relación muy estúpida con las pestañas. Todas las acciones de cada regla se identifican mediante pestañas. Y no, cuatro espacios no hacen una tabulación. Sólo una pestaña hace una pestaña.

Para verificar, uso el comando cat -e -t -v makefile_name.

Muestra la presencia de pestañas con ^I y terminaciones de línea con $. Ambos son vitales para garantizar que las dependencias finalicen correctamente y las pestañas marcan la acción de las reglas para que sean fácilmente identificables para 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

  • “cat -e -t -v makefile_name” es lo mejor. Alguna vez. Seguí mirando la pantalla, viendo lo que parecía una pestaña, y me perdí por completo que era la LÍNEA ÚNICA en todo el archivo que usaba espacios en lugar de una pestaña dura.

    – arinmorf

    1 de febrero de 2015 a las 15:44


  • Al copiar/pegar de un archivo MAKE a otro usando el editor vi (o vim), asegúrese de no agarrar accidentalmente la línea ~ (tilde) que indica el final del archivo. Un ~ real parece un marcador vi y causará el “separador faltante ***. Alto”. error. Esto puede parecer obvio, pero cuando sucede accidentalmente está lejos de ser evidente. Ver comentario de mi blog para más información.

    – Scott

    26 de febrero de 2016 a las 1:11

  • -v opción para cat el comando es redundante aquí porque -e significa -vE y -t significa -vT.

    – xxks-kkk

    25 de abril de 2016 a las 10:38

  • No es más “estúpido” que Python necesite espacios en blanco para controlar el flujo, o que C necesite identificadores compuestos por ciertos caracteres, o que el inglés necesite vocales. Es solo una regla.

    – pax diablo

    1 de febrero de 2018 a las 1:47

  • @JuhaUntinen no, nunca ha cambiado y no, no funciona igual de bien.

    – Científico loco

    19 abr 2019 a las 22:52

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

  • VS Code reconoció que mi archivo ‘common.mk’, extraído de un ‘Makefile’ sin sufijo, era un archivo de creación y lo resaltó correctamente, pero silenciosamente comenzó a sangrar con espacios en lugar de tabulaciones.

    – Francisco Norton

    8 de enero de 2018 a las 18:28

  • Esto funcionó cuando seleccioné “Convertir sangría en pestañas”

    – abk

    22 de noviembre de 2021 a las 2:42

avatar de usuario
denny mateo

Siempre debe escribir el comando después de un Pestaña y no espacios en blanco.

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

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

  • Para que quede muy claro, debe haber un carácter TAB fijo como primer carácter en cada línea de receta lógica. Después de la TAB, puede agregar cualquier tipo de espacio en blanco que desee.

    – Científico loco

    5 de junio de 2013 a las 12:47

  • ¿Debería el tabspace ser igual a 2 o 4? en /.vimrc establecer tabstop = 2 o 4?

    – Raúl Reddy

    5 de junio de 2013 a las 17:52

  • @RahulReddy cómo un editor muestra una pestaña no tiene nada que ver con si hay o no un carácter de pestaña en la configuración.

    – xaxxon

    14 mayo 2018 a las 11:14

Utilizando .editorconfig para arreglar las pestañas automáticamente:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab

  • Esto también ayuda en GoLand

    – Vizjerei

    30 de enero de 2020 a las 8:38

  • Encuentro IDE asuntos reales. La edición de pestañas no es compatible con pycharm. Cuando cambio a ATOM, la entrada TAB funciona.

    – Caballero de la luz de la luna

    12 de febrero de 2020 a las 10:33

  • Si su IDE sangra automáticamente con espacios, es posible que pueda ingresar una pestaña Unicode con \u09, lo que en algunos entornos de escritorio para Linux se puede hacer con Ctrl + Shift + U y luego escribir ’09’. ” “. Aunque no es muy divertido.

    – szmoore

    4 oct 2021 a las 9:51


TLDR;

La sintaxis del archivo MAKE puede ser peculiar
si desea que una línea de código se interprete como make código solo debe estar sangrado con espacios.
si desea que una línea de código se interprete como bash código solo debe estar sangrado con pestañas

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 principal la que dicta el intérprete.

avatar de usuario
pancho

Es una pregunta bastante antigua, pero aún así me gustaría decir sobre una opción más usando vi/vim editor para visualizar las pestañas. Si usted tiene vi/vim instalado, luego abra un Makefile (p.ej vim Makefile) e ingrese :set list. Esto mostrará el número de pestañas insertadas como se muestra a continuación,

 %-linux: force$
^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@; \$
^Ifi$
^Icd build-$@;make$

avatar de usuario
Bogdan Alexandru Militaru

Si alguno de ustedes está usando un producto de Intellij, la solución para esto es la siguiente:

  1. Vaya a Preferencias > Editor > Estilo de código
  2. aquí debe seleccionar el tipo de archivo relacionado con su problema. Pero lo más probable es que necesite seleccionar Other File Types.
  3. En la pestaña abierta, marque la casilla de verificación para Use tab character y ten cuidado, Tab size y Indent los valores deben ser 4.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad