web-dev-qa-db-fra.com

Erreur dans la commande make makefile: 18: *** séparateur manquant. Arrêtez

Pour le fichier make suivant copié ci-dessous, j'obtiens l'erreur de séparation manquante. Rien ne semble mal avec l'espace de tabulation.

OBJS = driver.o snapshot.o
SHOBJS = malloc.o mymemory.o
CC = g++
DEBUG = -g
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
Snapshot: $(OBJS)
  $(CC) $(LFLAGS) $(OBJS) -o Snapshot
driver.o: snapshot.h driver.cpp
  $(CC) $(CFLAGS) driver.cpp
snapshot.o: mymemory.h snapshot.h snapshot.cpp
  $(CC) $(CFLAGS) snapshot.cpp
libmymemory.so: $(SHOBJS)
  gcc -shared -o libmymemory.so malloc.o mymemory.o
malloc.o: malloc.c
  gcc -fPIC -g -c -Wall malloc.c
mymemory.o: mymemory.cpp
 gcc -fPIC -g -c -Wall mymemory.cpp 
clean:
 \rm *.o *~ Snapshot
31
subramanian

La ligne 18 est gcc -fPIC -g -c -Wall mymemory.cpp. Make attend un séparateur, généralement :. Il ne détecte pas cette ligne comme une commande. Vous avez mal saisi l'intention: vous avez des espaces où vous devriez avoir un onglet.

Les bons éditeurs mettent en évidence les lignes de makefile qui commencent par des espaces, mais semblent plutôt commencer par un onglet.

62
Gilles

J'ai vu ce message d'erreur lorsqu'un fichier a utilisé des espaces au lieu des tabulations au début d'une ligne dans le makefile.

20
Drew Noakes

Cela se produit principalement si vous copiez collez le code à partir d'Internet. Supprimez tous les espaces des lignes en retrait à l'aide de la touche Suppr. Et puis appuyez sur la touche de tabulation, une seule fois par ligne.

Enregistrez-le et essayez à nouveau d'exécuter le fichier. Ça devrait marcher maintenant. Cela a fonctionné pour moi.

5
Namit Gupta

Je ne sais pas si c'est précis ou s'il s'agit d'un artefact de collage du code en ligne, mais l'indentation des deux dernières commandes du fichier semble plus petite que les commandes au-dessus. Vérifiez soigneusement votre espacement.

3
bta