Fout maken: scheidingsteken ontbreekt

Ik krijg de volgende foutmelding bij het uitvoeren van make:

Makefile:168: *** missing separator.  Stop.

Wat veroorzaakt dit?


Antwoord 1, autoriteit 100%

Zoals aangegeven in de online handleiding, is de De meest voorkomende oorzaak van die fout is dat regels worden ingesprongen met spaties wanneer maketabtekens verwacht.

Correct

target: 
\tcmd

waar \tTAB is (U+0009)

Fout

target:
....cmd

waarbij elke .een SPATIE vertegenwoordigt (U+0020).


Antwoord 2, autoriteit 5%

Alleen voor de grijns, en voor het geval iemand anders een soortgelijke fout tegenkomt:

Ik kreeg de beruchte fout “ontbrekend scheidingsteken” omdat ik een regel had aangeroepen die een functie definieerde als

($eval $(call function,args))

in plaats van

$(eval $(call function,args))

d.w.z. ($in plaats van $(.


Antwoord 3, autoriteit 2%

Dit is een syntaxisfout in uw Makefile. Het is vrij moeilijk om specifieker te zijn dan dat, zonder het bestand zelf of relevante delen daarvan te zien.


Antwoord 4

Voor mij was het probleem dat ik een aantal end-of-line # ...opmerkingen had ingebed in een define ... endefmeerregelige variabeledefinitie . Door de opmerkingen te verwijderen, verdween het probleem.


Antwoord 5

Mijn fout was op een variabele declaratieregel met een extensie van meerdere regels. Ik heb een volgspatie na de “\” waardoor het een ongeldige voortzetting van de regel werd.

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

6

In mijn geval die de volgende is veroorzaakt. Ik heb geprobeerd de opdrachten wereldwijd te voeren, d.w.z. een doelwit.

UIT UIT. Om het commando te draaien, moet men goed worden gevormd. Bijvoorbeeld commando

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

zou worden:

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

7

In mijn geval werd deze fout veroorzaakt door het ontbreken van een ruimte. Ik had dit als blok in mijn makefile:

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

die had moeten zijn:

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

Met een spatie na indien.


8

In mijn geval werd dezelfde fout veroorzaakt omdat Colon :ontbrak aan het einde als in staging.deploy:. Dus merk op dat het een easy-syntaxisfout kan zijn.


9

Ik had het ontbrekende separatorbestand in makeFiles gegenereerd door QMake. Ik porteerde QT-code naar een ander platform. Ik had geen qmakespec en maak geen set. Hier is de link die ik het antwoord heb gevonden:

https:/Forum.qt.io / Onderwerp / 3783 / ontbrekende scheider-fout-in-makefile / 5


10

Om nog een reden toe te voegen waarom dit kan verschijnen:

$(eval VALUE)

is niet geldig en geeft de foutmelding “ontbrekend scheidingsteken”.

$(eval IDENTIFIER=VALUE)

is acceptabel. Dit soort fouten deed zich voor toen ik een macro had gedefinieerd met defineen probeerde te doen

define SOME_MACRO
... some expression ...
endef
VAR=$(eval $(call SOME_MACRO,arg))

waar de macro niet is geëvolueerd naar een opdracht.


Antwoord 11

De volgende Makefile-code werkte:

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

Antwoord 12

Dus blijkbaar was alles wat ik nodig had het “build-essential” pakket, en vervolgens om eerst autoconfuit te voeren, wat de Makefile.pre.inmaakte, en vervolgens de ./configuredan de makedie perfect werkt…

Other episodes