makefile: 4: *** falta separador. Detener


477

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?


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

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

En mcedit "Opciones -> General", asegúrese de que las "medias pestañas falsas" no tengan "X" entre corchetes antes de esa opción.
Jovan Ružić

Respuestas:


995

makefile tiene una relación muy estúpida con las pestañas, todas las acciones de cada regla se identifican por pestañas. Y no, 4 espacios no hacen una pestaña, solo 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 ^Iy las terminaciones de línea con $ambas son vitales para garantizar que las dependencias terminen correctamente y las pestañas marcan 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

8
"cat -e -t -v makefile_name" es lo mejor. Siempre. Seguí mirando la pantalla, viendo lo que parecía una pestaña, y me faltaba por completo que la LÍNEA ÚNICA en todo el archivo usara espacios en lugar de una pestaña dura.
arinmorf 01 de

¡Muchas gracias! He estado compilando el código fuente del gran proyecto. Pegué algunas líneas makefiledel tutorial, y no funcionó. ¡Solo después de eliminar espacios y poner en su Tablugar funcionó!
rzaaeeff

Cuando copie / pegue de un archivo MAKE a otro usando el editor vi (o vim) asegúrese de no tomar accidentalmente la línea ~ (tilde) que indica el final del archivo. Un ~ real parece un marcador vi y causará el "*** separador faltante. Deténgase". error. Esto puede parecer obvio, pero cuando sucede accidentalmente, está lejos de ser evidente. Vea el comentario de mi blog para más información.
Scott

3
-vLa opción de catcomando es redundante aquí porque -esignifica -vEy -tsignifica -vT.
xxks-kkk

2
Aquí hay un carácter de tabulación si alguien usa un editor que reemplaza las pestañas, copie y pegue desde aquí:.
Ivan Borshchov

32

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


1
Ni siquiera me di cuenta de eso allí abajo, gracias por esa información. Anteriormente estaba usando un regex find-replace pero esto es mucho mejor.
Peanut

VS Code reconoció que mi archivo 'common.mk', extraído de un 'Makefile' sin sufijo, era un archivo make, y lo resaltó correctamente, pero silenciosamente comenzó a sangrar con espacios en lugar de pestañas.
Francis Norton el

¡Gracias por la ayuda! Definitivamente no noté que había una configuración de pestaña en esa esquina inferior.
se_brandon

28

Siempre debe escribir el comando después de un Tabespacio en blanco y no en blanco.

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

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


3
Para ser muy claro, debe haber un carácter TAB duro como primer carácter en cada línea de receta lógica. Después del TAB, puede agregar cualquier tipo de espacio en blanco que desee.
MadScientist

¿Debería el espacio de pestañas ser igual a 2 o 4? en /.vimrc set tabstop = 2 o 4?
Rahul Reddy

@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

Gran consejo, porque tenía espacios en el frente. Cuando lo comprobé funcionó. Magnífico :)
indianwebdevil

9

La solución para 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.


Esto también ayuda en GoLand
Vizjerei

Encuentro IDE asuntos reales. La edición Tab no es compatible con pycharm. Cuando cambio a ATOM, la entrada TAB funciona.
Moonlight Knight

6

Es una pregunta bastante antigua, pero aún me gustaría decir sobre una opción más usando el vi/vimeditor para visualizar las pestañas. Si ha vi/viminstalado, abra un Makefile(por ejemplo vim Makefile) e ingrese :set list. Esto mostrará el número de pestañas insertadas de la siguiente manera,

 %-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$

6

Utilizando .editorconfigpara 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

4

El punto clave era "PESTAÑA DURA" 1. Verifique si utilizó TAB en lugar de espacios en blanco 2. Verifique su .vimrc para "set tabstop = X"


2

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 necesites seleccionar Other File Types.
  3. En la pestaña abierta, marque la casilla de verificación Use tab charactery tenga cuidado, Tab sizey los Indentvalores deben ser 4.

2

Si está utilizando mcedit para editar archivos MAKE. Tienes que ver la siguiente marca. ingrese la descripción de la imagen aquí


0

Esto se debe a que la pestaña se reemplaza por espacios. Para deshabilitar esta función, vaya a

gedit-> editar-> preferencias-> editor

y quite el cheque para

" reemplazar pestaña con espacio "

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.