Séparateur manquant dans Makefile?
Le Makefile suivant ne fonctionne pas et je ne suis pas sûr de ce qu'il se passe.
CC = gcc
CFLAGS = -Wall -g
demo:
${CC} ${CFLAGS} demo.c -o demo
lib:
${CC} ${CFLAGS} lib.c -o lib
clean:
rm -f lib demo
Démo a la fonction principale et la lib est un ensemble de méthodes utilisées dans la démo.
J'ai ajouté l'indicateur-c pour lib. Cependant quand je lance le make, j'ai:
Makefile:5: *** missing separator. Stop.
source d'informationauteur Kobi | 2012-03-06
Vous devez vous connecter pour publier un commentaire.
Donné votre mise à jour avec l'erreur, vérifiez ce que vous avez sur la ligne, avant que ceux
${CC}
commandes. De nombreuxmake
programmes exigent un réel caractère de tabulation avant les commandes et les éditeurs qui mettent en huit espaces (par exemple) va les briser. C'est le plus souvent la cause du "Manque séparateur" erreurs.Vous pouvez le voir avec la transcription suivante. Dans le fichier, il y a quatre espaces avant le
$(xyzzy)
:Donc, quand je le fais, je reçois la même erreur que vous:
Mais, quand je le modifier et de transformer ces quatre espaces dans un onglet, il fonctionne très bien:
Vous avez également un problème avec la façon dont vous êtes en essayant de combiner les fichiers source d'ensemble.
Sans
-c
drapeau àgcc
il va essayer de créer un exécutable à partir de chaque de ces commandes, presque certainement à l'éditeur de liens erreurs. Vous allez avoir besoin de quelque chose comme (simple):ou (un peu plus complexe):
Le problème avec la première solution, c'est qu'il inutilement compile à la fois des programmes, même si un seul est hors de date. La deuxième solution est un peu plus intelligent.
Ne vous manque quelques "onglet" (
\t
) avant${CC}
par hasard?Souvent mon éditeur va remplacer les tabulations par des espaces, et je serais ce message.
lib
doit être compilé comme une bibliothèque, pas un programme.Essayez de la remplacer par:
Depuis
main
dépendlib
:et