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?
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 !!
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
Sur VS Code, cliquez simplement sur "Espace: 4" dans le coin droit et changez-le en onglet lors de l'édition de votre Makefile.
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$
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"
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 "
La solution pour PyCharm
serait d'installer un plugin Makefile support
:
Preferences
(cmd + ,
)Plugins
-> Marketplace
Makefile support
, installez et redémarrez l'EDI.Cela devrait résoudre le problème et fournir une syntaxe pour un fichier make.
Si quelqu'un d'entre vous utilise un produit d'Intellij, la solution à cela est la suivante:
Other File Types
.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