Réponses:
Comme indiqué dans le manuel en ligne , la cause la plus courante de cette erreur est que les lignes sont mises en retrait avec des espaces lorsque des make
tabulations sont attendues .
target:
\tcmd
où \t
est TAB (U + 0009)
target:
....cmd
où chacun .
représente un ESPACE (U + 0020).
Juste pour les sourires, et au cas où quelqu'un d'autre rencontrerait 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 ($
plutôt que $(
.
0x20
"d'espace", n'est-ce pas?
$
Il s'agit d'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 intégrés dans une define ... endef
définition de variable multiligne. La suppression des commentaires a fait disparaître le problème.
define
directive étaient traités littéralement. En fait, le comportement n'est pas expliqué dans la documentation . (Pour plus de clarté: l'incorporation d'un signe numérique #
dans la directive n'est pas en soi une erreur de syntaxe. Mais elle n'est tout simplement pas interprétée comme le début d'un commentaire, ce qui est certes sujet à erreur.)
Dans mon cas, l'erreur suivante a été provoquée. 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, il me manquait en fait un onglet entre ifeq
et la commande sur la ligne suivante. Aucun espace n'était là pour commencer.
ifeq ($(wildcard $DIR_FILE), )
cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Aurait du être:
ifeq ($(wildcard $DIR_FILE), )
<tab>cd $FOLDER; cp -f $DIR_FILE.tpl $DIR_FILE.xs;
endif
Notez que <tab>
c'est un caractère de tabulation réel
J'ai eu le fichier de séparateur manquant dans Makefiles généré par qmake. Je portais du code Qt sur une autre plateforme. Je n'avais ni QMAKESPEC ni MAKE. Voici le lien dont j'ai trouvé la réponse:
https://forum.qt.io/topic/3783/missing-separator-error-in-makefile/5
Donc apparemment, tout ce dont j'avais besoin était le paquet "build-essential", puis de lancer d' autoconf
abord, ce qui faisait le Makefile.pre.in
, puis le ./configure
puis le make
qui fonctionnait 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