[*]
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 make
me sale este error:
:makefile:4: *** missing separator. Stop.
¿Cómo puedo arreglarlo?

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

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

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$

Bogdan Alexandru Militaru
Si alguno de ustedes está usando un producto de Intellij, la solución para esto es la siguiente:
- Vaya a Preferencias > Editor > Estilo de código
- aquí debe seleccionar el tipo de archivo relacionado con su problema. Pero lo más probable es que necesite seleccionar
Other File Types
.
- 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.
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