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?

256
demandé sur Greg 2013-06-05 08:48:50

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 !!

542
répondu nsd 2018-05-14 11:13:38

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

18
répondu Denny Mathew 2013-06-05 04:59:34

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.

16
répondu alanwsx 2016-07-18 15:04:59

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"

4
répondu wlsherica 2014-11-21 15:05:44

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$
4
répondu Panch 2017-02-13 02:00:18

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"

1
répondu Shrinivas Patgar 2016-09-01 13:54:55

Si quelqu'un d'entre vous utilise un produit D'Intellij, la solution pour cela est la suivante:

  1. allez dans Préférences > éditeur > Style de Code
  2. ici, vous devez sélectionner le type de fichier lié à votre problème. Mais très probablement, vous devez sélectionner Other File Types.
  3. dans l'onglet ouvert, cochez la case Use tab character et attention, les valeurs Tab size et Indent doivent être 4.
1
répondu Bogdan Alexandru Militaru 2018-06-25 08:47:07

Si vous utilisez mcedit pour makefile edit. vous avez qu'à voir la marque suivante. entrez la description de l'image ici

1
répondu riguang zheng 2018-09-17 09:05:56