Der Fehler, auf den Sie stoßen:
*** fehlendes Trennzeichen (meinten Sie TAB anstelle von 8 Leerzeichen?). Halt.
Bedeutet, dass das makefile
Leerzeichen anstelle von Tabulatoren enthält. Das make
Dienstprogramm ist notorisch wählerisch in Bezug auf die Verwendung von Spacestatt Tab. Es ist also wahrscheinlich, dass die makefile
Zeilengruppen Spaceam Anfang von Regeln enthalten sind.
Beispiel
Angenommen, ich habe die folgenden 3 .c
Dateien:
Hallo 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;
}
Angenommen, ich habe Folgendes 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!
Jetzt versuchen wir ein Ziel zu erstellen
Wenn ich es gegen das Ziel laufen lasse helloworld
:
$ make helloworld
makefile:3: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
Ähnlich aussehend?
Behebung des Problems
Sie können dies beheben, indem Sie die Zeichen Spacesin tatsächliche ändern Tab. Ich habe vim
meine Datei repariert. Einfach öffnen:
$ vim makefile
Führen Sie diesen Befehl dann aus in:
:%s/^[ ]\+/^I/
HINWEIS: ^I
ist ein Sonderzeichen. Die Eingabe ^gefolgt von Iwird anders interpretiert als Ctrl+ V- Ctrl+ I.
Dadurch werden alle Zeilen, die mit 1 oder mehr beginnen, Spacesdurch eine tatsächliche ersetzt Tab.
Wenn ich jetzt mein helloworld
Ziel erneut ausführe :
$ 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!
Verweise