Ошибка, с которой вы столкнулись:
*** отсутствует разделитель (вы имели в виду TAB вместо 8 пробелов?). Стоп.
Означает, что makefile
содержит пробелы вместо табуляции. make
Утилита , как известно , разборчивы об использовании Spaceвместо Tab. Таким образом, вполне вероятно, что в начале файла makefile
содержится Spaceраздел правил в файле.
пример
Допустим, у меня есть следующие 3 .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;
}
Скажем, у меня есть следующее 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!
Теперь мы пытаемся построить цель
Когда я запускаю его против цели helloworld
:
$ make helloworld
makefile:3: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
Выглядит знакомо?
Исправление проблемы
Вы можете исправить это, изменив Spacesдействительные Tabсимволы. Я использовал, vim
чтобы восстановить мой файл. Просто откройте его:
$ vim makefile
И затем выполните эту команду в:
:%s/^[ ]\+/^I/
ПРИМЕЧАНИЕ: ^I
это специальный символ. Ввод с ^последующим Iбудет интерпретироваться по-разному по сравнению с Ctrl+ V- Ctrl+ I.
Это заменит все строки, начинающиеся с 1 или более, Spacesфактическими Tab.
Теперь, когда я перезапущу свою helloworld
цель:
$ 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!
Ссылки