Faire une erreur: séparateur manquant

Je reçois l’erreur suivante en exécutant make :

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

Qu’est-ce qui cause cela?

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 blancs lorsque make attend des caractères de tabulation.

Correct

 cible: 
 \ tcmd

où \ t est TAB

Faux

 cible:
     cmd

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

J’ai eu la fameuse erreur “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...

Ceci 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 les parties pertinentes de celui-ci.

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

Mon erreur était sur une ligne de déclaration de variable avec une extension multiligne. J’ai un espace après le “\”, ce qui en fait une suite de ligne non valide.

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

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

UPD. Pour exécuter la 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, cette erreur a été causée par l’absence d’un simple espace. J’avais ce bloc si dans mon makefile:

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

qui aurait dû être:

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

avec un espace après si.

Donc apparemment, tout ce dont j’avais besoin était le paquet “build-essential”, puis de lancer autoconf premier, ce qui faisait le Makefile.pre.in , puis le ./configure alors le make qui fonctionne parfaitement …

Le code Makefile suivant a fonctionné:

 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