Fehler machen: fehlendes Trennzeichen

Antworten:

363

Wie im Online-Handbuch angegeben , besteht die häufigste Ursache für diesen Fehler darin, dass Zeilen mit Leerzeichen eingerückt werden, wenn makeTabulatorzeichen erwartet werden.

Richtig

target: 
\tcmd

wo \tist TAB (U + 0009)

Falsch

target:
....cmd

wobei jedes .ein Leerzeichen darstellt (U + 0020).

dfa
quelle
4
Sie können .RECIPEPREFIX verwenden, um die Zeichenverwendung zu ändern. Siehe: gnu.org/software/make/manual/html_node/…
aseq
16

Nur zum Grinsen und für den Fall, dass jemand anderes auf einen ähnlichen Fehler stößt:

Ich habe den berüchtigten Fehler "fehlendes Trennzeichen" erhalten, weil ich eine Regel aufgerufen hatte, die eine Funktion als definiert

($eval $(call function,args))

eher, als

$(eval $(call function,args))

dh ($eher als $(.

Krazy Glew
quelle
Was? :) Ich denke du hattest dort keinen 0x20"Platz", ist das richtig?
user35443
3
@ user35443 Die Platzierung von$
smac89
8

Dies ist ein Syntaxfehler in Ihrem Makefile. Es ist ziemlich schwierig, genauer zu sein, ohne die Datei selbst oder relevante Teile davon zu sehen.

entspannen
quelle
5

Für mich bestand das Problem darin, dass ich einige Zeilenende- # ...Kommentare in eine define ... endefmehrzeilige Variablendefinition eingebettet hatte . Durch das Entfernen der Kommentare wurde das Problem behoben.

Hugues
quelle
Danke dir. Ich wusste nicht, dass Kommentare in der defineRichtlinie wörtlich behandelt werden. Eigentlich wird das Verhalten in der Dokumentation nicht erklärt . (Aus Gründen der Klarheit: Das Einbetten eines Zahlenzeichens in die Direktive selbst ist kein Syntaxfehler. Es wird jedoch nicht als Beginn eines Kommentars interpretiert, daher ist dies zugegebenermaßen fehleranfällig.)#
ynn
3

Mein Fehler war in einer Variablendeklarationszeile mit einer mehrzeiligen Erweiterung. Ich habe ein nachgestelltes Leerzeichen nach dem "\", was dies zu einer ungültigen Zeilenfortsetzung machte.

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2
JHarveyJr
quelle
1

In meinem Fall Fehler als nächstes verursacht. Ich habe versucht, Befehle global auszuführen, dh außerhalb eines Ziels.

UPD. Um einen Befehl global ausführen zu können, muss er ordnungsgemäß gebildet sein. Zum Beispiel Befehl

ln -sf ../../user/curl/$SRC_NAME ./$SRC_NAME

würde werden:

$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
Yuliskov
quelle
1

In meinem Fall wurde der gleiche Fehler verursacht, weil :am Ende der Doppelpunkt fehlte wie in staging.deploy:. Beachten Sie also, dass es leicht zu Syntaxfehlern kommen kann.

Pratik
quelle
1

In meinem Fall fehlte mir tatsächlich eine Registerkarte dazwischen ifeqund der Befehl in der nächsten Zeile. Anfangs gab es keine Leerzeichen.

ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

Gewesen sein sollte:

ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif

Beachten Sie, dass dies <tab>ein tatsächliches Tabulatorzeichen ist

Nena
quelle
0

In meinem Fall wurde dieser Fehler durch das Fehlen eines Platzes verursacht. Ich hatte diesen if-Block in meinem Makefile:

if($(METHOD),opt)
CFLAGS=
endif

was hätte sein sollen:

if ($(METHOD),opt)
CFLAGS=
endif

mit einem Leerzeichen nach if.

Hashimoto
quelle
-1

Alles, was ich anscheinend brauchte, war das "Build-Essential" -Paket, um dann zuerst zu laufen autoconf, was das machte Makefile.pre.in, dann das, was ./configuredann makeperfekt funktioniert ...

Kl3m Michard
quelle
-2

Der folgende Makefile-Code hat funktioniert:

obj-m = hello.o

all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Jaishree Alavandar
quelle