O erro que você está encontrando:
*** separador ausente (você quis dizer TAB em vez de 8 espaços?). Pare.
Significa que o makefile
contém espaços em vez de tabulações. O make
utilitário é notoriamente exigente quanto ao uso de, em Spacevez de Tab. Portanto, é provável que makefile
contenha Spaceno início das sub-rotinas da regra no arquivo.
Exemplo
Digamos que tenho os seguintes 3 .c
arquivos:
hello.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 tenho o seguinte 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!
Agora tentamos construir um alvo
Quando eu corro contra o alvo helloworld
:
$ make helloworld
makefile:3: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
Parece familiar?
Corrigindo o problema
Você pode corrigir isso alterando os caracteres Spacespara reais Tab. Eu costumava vim
reparar meu arquivo. Basta abri-lo:
$ vim makefile
E, em seguida, execute este comando dentro de:
:%s/^[ ]\+/^I/
NOTA: ^I
é um caractere especial. A digitação ^seguida por Iserá interpretada de forma diferente em comparação com Ctrl+ V- Ctrl+ I.
Isso substituirá todas as linhas que começam com 1 ou mais Spacespor uma real Tab.
Agora, quando reexecuto meu helloworld
alvo:
$ 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!
Referências