El error que estás encontrando:
*** separador faltante (¿quiso decir TAB en lugar de 8 espacios?). Detener.
Significa que makefile
contiene espacios en lugar de Tab. La make
utilidad es notablemente exigente con el uso de en Spacelugar de Tab. Por lo tanto, es probable que makefile
contenga Spaceal principio de las estrofas de reglas dentro del archivo.
Ejemplo
Digamos que tengo los siguientes 3 .c
archivos:
Hola C
char *
hello()
{
return "Hello";
}
world.c
char *
world()
{
return "world";
}
main.c :
#include <stdio.h>
/* Prototypes. */
char *hello();
char *world();
int
main(int argc, char *argv[])
{
printf("%s, %s!\n", hello(), world());
return 0;
}
Digamos que tengo lo siguiente Makefile
:
# The executable 'helloworld' depends on all 3 object files
helloworld: main.o hello.o world.o
cc -o helloworld main.o hello.o world.o # Line starts with TAB!
# Build main.o (only requires main.c to exist)
main.o: main.c
cc -c main.c # Line starts with TAB!
# Build hello.o (only requires hello.c to exist)
hello.o: hello.c
cc -c hello.c # Line starts with TAB!
# Build world.o (only requires world.c to exist)
world.o: world.c
cc -c world.c # Line starts with TAB!
# Remove object files, executables (UNIX/Windows), Emacs backup files,
#+ and core files
clean:
rm -rf *.o helloworld *~ *.core core # Line starts with TAB!
Ahora intentamos construir un objetivo
Cuando lo ejecuto contra el objetivo helloworld
:
$ make helloworld
makefile:3: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
¿Parecer familiar?
Solucionando el problema
Puede solucionar esto cambiando los caracteres Spacesreales Tab. Solía vim
reparar mi archivo. Simplemente ábralo:
$ vim makefile
Y luego ejecuta este comando dentro de:
:%s/^[ ]\+/^I/
NOTA: ^I
es un personaje especial. La escritura ^seguida por Ise interpretará de manera diferente en comparación con Ctrl+ V- Ctrl+ I.
Esto sustituirá todas las líneas que comienzan con 1 o más Spacescon un real Tab.
Ahora cuando vuelvo a ejecutar mi helloworld
objetivo:
$ make helloworld
cc -c main.c # Line starts with TAB!
cc -c hello.c # Line starts with TAB!
cc -c world.c # Line starts with TAB!
cc -o helloworld main.o hello.o world.o # Line starts with TAB!
Referencias