web-dev-qa-db-fra.com

makefile: 4: *** séparateur manquant. Arrêtez

Ceci est mon makefile:

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<

clean :
  \rm -fr ll

Lorsque j'essaie de make clean ou make make, j'obtiens cette erreur:

:makefile:4: *** missing separator.  Stop.

Comment puis-je le réparer?

302
Rahul Reddy

makefile a une relation très stupide avec les onglets, toutes les actions de chaque règle sont identifiées par des onglets ...... et aucun espace ne fait 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 des onglets avec ^I et des fins de ligne avec $ sont indispensables pour s'assurer que les dépendances se terminent correctement et les onglets marquent l'action des règles afin qu'elles soient facilement identifiables pour 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 cela t'aides !!

642
nsd

Vous devriez toujours écrire une commande après un "tab" et non un espace.

Ceci s’applique à la ligne "gcc" (ligne 4) dans votre cas. Vous devez insérer une tabulation avant gcc.

Remplacez également\rm -fr ll par "rm -fr ll". Insérer des onglets avant cette commande aussi

22
Denny Mathew

Sur VS Code, cliquez simplement sur "Espace: 4" dans le coin droit et changez-le en onglet lors de l'édition de votre Makefile.

20
alanwsx

C'est une question assez ancienne, mais j'aimerais quand même dire une option supplémentaire en utilisant l'éditeur vi/vim pour visualiser les onglets. Si vous avez installé vi/vim, ouvrez une Makefile (exemple: vim Makefile) et entrez :set list. Cela montrera 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$
5
Panch

Le point clé était "HARD TAB" 1. Vérifiez si vous avez utilisé TAB au lieu d’espaces blancs 2. Vérifiez votre .vimrc pour "set tabstop = X" 

4
wlsherica

En effet, l'onglet est remplacé par des espaces . Pour désactiver cette fonctionnalité, allez à 

gedit-> éditer-> préférences-> éditeur

et enlever le chèque pour 

" remplace la tabulation par un espace

2
Shrinivas Patgar

La solution pour PyCharm serait d'installer un plugin Makefile support:

  1. Ouvrez Preferences (cmd + ,)
  2. Allez à Plugins -> Marketplace
  3. Recherchez Makefile support, installez et redémarrez l'EDI.

Cela devrait résoudre le problème et fournir une syntaxe pour un fichier make.

2
Tomasz Bartkowiak

Si vous utilisez mcedit pour l’édition de makefile. vous devez voir la marque suivante .  enter image description here

1
riguang zheng

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

  1. Allez dans Préférences> Editeur> Style de code 
  2. ici, vous devez sélectionner le type de fichier lié à votre problème. Mais vous devez probablement sélectionner Other File Types.
  3. Dans l'onglet ouvert, cochez la case Use tab character et soyez prudent, les valeurs Tab size et Indent doivent être 4.

Utilisation de .editorconfig pour corriger les onglets automatiquement:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab
0
DanFromGermany