Beim Versuch, die som_pak-3.1-NAcMoS.tar.gz
Datei zu installieren , habe ich die folgenden Befehle verwendet:
$ tar xvf som_pak-3.1-NAcMoS.tar.gz
$ cd som_pak-3.1
$ cp makefile.unix makefile
$ make
$ cd ..
$ ln -s som_pak-3.1 $NACMOS_HOME/som_pak
Beim Ausführen des make
Befehls wird jedoch der folgende Fehler angezeigt:
* fehlendes Trennzeichen (meinten Sie TAB anstelle von 8 Leerzeichen?). Halt.
- Kann mir jemand den Grund für den Fehler nennen?
- Gibt es Pakete, die dazu gehören müssen?
Antworten:
Der Fehler, auf den Sie stoßen:
Bedeutet, dass das
makefile
Leerzeichen anstelle von Tabulatoren enthält. Dasmake
Dienstprogramm ist notorisch wählerisch in Bezug auf die Verwendung von Spacestatt Tab. Es ist also wahrscheinlich, dass diemakefile
Zeilengruppen Spaceam Anfang von Regeln enthalten sind.Beispiel
Angenommen, ich habe die folgenden 3
Hallo c world.c main.c :.c
Dateien:Angenommen, ich habe Folgendes
Makefile
:Jetzt versuchen wir ein Ziel zu erstellen
Wenn ich es gegen das Ziel laufen lasse
helloworld
:Ä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:Führen Sie diesen Befehl dann aus in:
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 :Verweise
quelle
Wie in der anderen Antwort vorgeschlagen, benötigen Makefiles Tabulatorzeichen und keine Leerzeichen. Ich habe meine
.vimrc
Einstellung, alle Registerkarten automatisch durch Leerzeichen zu ersetzen, daher muss ich die umgekehrte Einstellung in einzelnen Makefiles manuell festlegen. Dervim
Befehl, den ich benutze, lautet wie folgt:quelle
# vim: set noet:
Hinweis: Die richtige Möglichkeit, mit diesem speziellen Problem umzugehen, besteht darin, das Makefile so zu korrigieren, dass jede Aktionszeile jedes Rezepts mit einem einzelnen Tabulatorzeichen eingerückt wird, und dann einen Patch dafür an die ursprünglichen Entwickler zu senden.
Dies ist ein hässlicher Hack, der mit neueren Versionen von GNU funktioniert
make
(wenn das Problem darin besteht, dass das Makefile konsistent Leerzeichen anstelle von Tabulatoren verwendet):Dadurch wird die spezielle GNU-
make
Variable.RECIPEPREFIX
auf ein einzelnes Leerzeichen gesetzt. Diese Variablemake
steuert seit GNU 3.82 oder so (2007) das Zeichen, das zum Präfixieren der Aktionszeilen der Rezepte verwendet wird. Wenn die Variable leer ist (wie standardmäßig), werden Registerkarten verwendet.Beispiel,
Beispiel für die Verwendung mit
>
(Festlegen der Variablen im Makefile in diesem Fall):Siehe auch:
make
Handbuch.quelle