«Make clean» résulte en «Aucune règle pour rendre la cible« clean »»

Je suis sous Ubuntu 10.04. Chaque fois que je cours en mode make clean , je reçois ceci:

make: *** Aucune règle pour rendre la cible «propre». Arrêtez.

Voici mon makefile:

 CC = gcc CFLAGS = -g -pedantic -O0 -std=gnu99 -m32 -Wall PROGRAMS = digitreversal all : $(PROGRAMS) digitreversal : digitreversal.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) .PHONY: clean clean: @rm -f $(PROGRAMS) *.o core 

Des idées pourquoi son ne fonctionne pas?

EDIT: Il semble que faire:

 make -f Makefile.txt clean 

travaux. Maintenant: y a-t-il un paramètre à changer pour que je n’ai pas à faire le -f Makefile.txt chaque fois?

Il semble que le nom de votre makefile ne soit pas ‘Makefile’ ou ‘Makefile’. Dans le cas contraire, dites ‘abc’ essayez de lancer ‘make -f abc clean’

Je suppose que vous l’avez compris maintenant. La réponse est cachée dans votre premier courrier lui-même.

La commande make par défaut le fichier makefile , le fichier Makefile et le fichier GNUMakefile dans le fichier d’entrée. Le fichier Makefile.txt dans votre dossier. Supprimez simplement l’extension de fichier ( .txt ) et cela devrait fonctionner.

Vérifiez que le fichier s’appelle GNUMakefile, Makefile ou Makefile.

S’il s’appelle autre chose (et que vous ne voulez pas le renommer), essayez:

make -f othermakefilename clean

Cela fonctionne pour moi. Êtes-vous sûr que vous indentez avec des tabs?

 CC = gcc CFLAGS = -g -pedantic -O0 -std=gnu99 -m32 -Wall PROGRAMS = digitreversal all : $(PROGRAMS) digitreversal : digitreversal.o [tab]$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) .PHONY: clean clean: [tab]@rm -f $(PROGRAMS) *.o core 

Vous êtes victime des erreurs les plus courantes dans Makefiles. Vous devez toujours mettre un onglet au début de chaque commande. Vous avez mis des espaces avant les lignes @rm -f $(PROGRAMS) *.o core $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) et @rm -f $(PROGRAMS) *.o core . Si vous les remplacez par un onglet, tout ira bien.

Cependant, cette erreur n’entraîne pas l’erreur “Aucune règle à définir sur la cible …”. Cela signifie probablement que votre problème se situe au-delà de votre Makefile. Avez-vous vérifié que c’est le bon Makefile, comme dans celui que vous voulez spécifier vos commandes? Essayez explicitement de le passer en tant que paramètre pour make, make -f Makefile et make -f Makefile -nous ce qui se passe.