makefile: 4: * * * séparateur manquant. Arrêter
C'est mon makefile:
all:ll
ll:ll.c
gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<
clean :
rm -fr ll
Quand j'essaie de make clean
ou make make
, j'obtiens cette erreur:
:makefile:4: *** missing separator. Stop.
Comment puis-je le réparer?
8 réponses
Makefile a une relation très stupide avec les onglets , toutes les actions de chaque règle sont identifiées par des onglets ...... et pas de 4 espaces ne font pas un onglet, seul un onglet fait un onglet...
Pour vérifier j'utilise la commande cat -e -t -v makefile_name
Il montre la présence d'onglets avec ^I et les fins de ligne avec $ les deux sont vitales pour s'assurer que les dépendances se terminent correctement et que les onglets marquent l'action des règles afin qu'elles soient facilement identifiables à l'utilitaire make.....
Exemple :
Kaizen ~/so_test $ cat -e -t -v mk.t
all:ll$ ## here the $ is end of line ...
$
ll:ll.c $
^Igcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<$
## the ^I above means a tab was there before the action part, so this line is ok .
$
clean :$
\rm -fr ll$
## see here there is no ^I which means , tab is not present ....
## in this case you need to open the file again and edit/ensure a tab
## starts the action part
J'espère que ça aide !!
Vous devez toujours écrire la commande après un "onglet" et non un espace blanc.
Cela s'applique à la ligne" gcc " (ligne # 4) dans votre cas. Vous devez insérer tab avant gcc.
Remplacez également \rm-fr ll par "rm-fr ll". Insérez également des onglets avant cette commande
Sur le code VS, cliquez simplement sur le "ESPACE: 4" dans le coin droit et changez-le en onglet lors de l'édition de votre Makefile.
Le point clé était " onglet dur" 1. Vérifiez si vous avez utilisé TAB au lieu D'espaces 2. Vérifiez vos .vimrc pour "set tabstop = X"
C'est une question assez ancienne mais je voudrais quand même dire une option de plus en utilisant l'éditeur vi/vim
pour visualiser les onglets. Si vous avez vi/vim
installé, puis ouvrir un Makefile
(par exemple, vim Makefile
) et entrez - :set list
. Cela affichera le nombre d'onglets insérés comme ci-dessous,
%-linux: force$
^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@; \$
^Ifi$
^Icd build-$@;make$
C'est parce que tab est remplacé par des espaces. Pour désactiver cette fonctionnalité, accédez à
Gedit->édition->préférences->éditeur de
Et supprimer la vérification de
"onglet remplacer avec de l'espace"
Si quelqu'un d'entre vous utilise un produit D'Intellij, la solution pour cela est la suivante:
- allez dans Préférences > éditeur > Style de Code
- ici, vous devez sélectionner le type de fichier lié à votre problème. Mais très probablement, vous devez sélectionner
Other File Types
. - dans l'onglet ouvert, cochez la case
Use tab character
et attention, les valeursTab size
etIndent
doivent être 4.