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?
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.
cible: \tcmd
où est TAB
cible: cmd
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...
.
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.
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
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.
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))
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.
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...
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.