web-dev-qa-db-fra.com

Faire une erreur: séparateur manquant

Je reçois le message d'erreur suivant lors de l'exécution de make:

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

Qu'est-ce qui cause ça?

203
Renjith G

Comme indiqué dans le manuel en ligne , la cause la plus courante de cette erreur est que les lignes sont en retrait avec des espaces, lorsque make attend des caractères de tabulation.

Correct

 cible: 
\tcmd 

où est TAB

Faux

 cible: 
 cmd 
310
dfa

Juste pour les sourires, et au cas où quelqu'un d'autre rencontrait une erreur similaire:

J'ai eu le fameux "manquant séparateur" erreur 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....

12
Krazy Glew

C'est une erreur de syntaxe dans votre Makefile. Il est assez difficile d’être plus précis que cela, sans voir le fichier lui-même, ou une partie de ceux-ci.

8
unwind

Mon erreur était sur une ligne de déclaration de variable avec une extension multi-ligne. J'ai un espace de fin après le "\" qui en a fait une continuation de ligne invalide.

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

Pour moi, le problème était que j'avais des commentaires de fin de ligne # ... incorporés dans une définition de variable define ... endef. En supprimant les commentaires, le problème a disparu.

2
Hugues

Dans mon cas, l'erreur a été causée ensuite. J'ai essayé d'exécuter des commandes globalement, c'est-à-dire en dehors de toute cible.

UPD. Pour exécuter une commande globalement, il faut être correctement formé. Par exemple commande

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

deviendrait:

$(Shell ln -sf ../../user/curl/$(SRC_NAME) ./$(SRC_NAME))
1
yuliskov

Dans mon cas, la même erreur a été causée parce que deux: manquaient à la fin, comme dans staging.deploy:. Notez donc que cela peut être une erreur de syntaxe facile.

0
Pratik

Donc, apparemment, tout ce dont j'avais besoin était le paquet "build-essential", puis lancer autoconf en premier, ce qui donnait le Makefile.pre.in, puis le ./configure puis le make qui fonctionne à la perfection...

0
Kl3m Michard

Dans mon cas, cette erreur a été causée par le manque d'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
Hashimoto