Erreur: séparateur manquant

j'obtiens l'erreur suivante en lançant make :

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

Qu'est-ce qui cause cela?

164
demandé sur Keith Pinson 2009-05-28 15:35:16

9 réponses

comme indiqué dans le online manual , la cause la plus fréquente de cette erreur est que les lignes sont indentées avec des espaces blancs lorsque make attend des caractères tab.

Correct

target: 
\tcmd

\t est l'ONGLET

Mauvais

target:
    cmd
260
répondu dfa 2012-06-20 12:13:32

juste pour les grins, et au cas où quelqu'un d'autre rencontre une erreur similaire:

j'ai eu l'infâme erreur de "séparateur manquant" parce que j'avais invoqué une règle définissant une fonction comme

($eval $(call function,args))

plutôt que

$(eval $(call function,args))

c'est à dire ($eval $(call... plutôt que $(eval $(call... .

10
répondu Krazy Glew 2016-01-10 19:38:22

C'est une erreur de syntaxe dans votre Makefile. Il est assez difficile d'être plus précis que cela, sans voir le dossier lui-même, ou la(les) Partie (s) pertinente (s) de celui-ci.

4
répondu unwind 2009-05-28 11:38:20

pour moi, le problème était que j'avais des commentaires en fin de ligne # ... inclus dans une définition de variable multi-ligne define ... endef . Dépose des observations formulées par le problème.

2
répondu Hugues 2016-05-09 23:07:16

mon erreur était sur une ligne de déclaration variable avec une extension multi-ligne. J'ai un espace de fuite après le "\" qui a fait que la ligne de continuation est invalide.

MY_VAR = \
   val1 \ <-- 0x20 there caused the error.
   val2
2
répondu JHarveyJr 2017-03-28 20:45:34

dans mon cas, l'erreur est la suivante. J'ai essayé d'exécuter des commandes globalement I. e en dehors de toute cible.

UPD. Pour exécuter un commandement Globalement, il faut être correctement formé. Par exemple la commande

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

deviendrait:

$(shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
1
répondu yuliskov 2015-11-03 22:51:49

Dans mon cas, cette erreur est causée par le manque d'un simple espace. J'avais ceci si block dans mon makefile:

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

qui aurait dû être:

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

avec un espace après si.

0
répondu Hashimoto 2018-02-03 02:10:48

donc apparemment, tout ce dont j'avais besoin était le paquet" build-essential", puis d'exécuter autoconf d'abord, qui a fait le Makefile.pre.in , puis le ./configure puis le make qui fonctionne parfaitement...

0
répondu Kl3m Michard 2018-08-19 23:10:17

code Makefile suivant travaillé:

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
-1
répondu Jaishree Alavandar 2015-08-10 11:25:30