web-dev-qa-db-fra.com

"rendre propre" entraîne "Aucune règle pour rendre la cible" propre ""

J'utilise Ubuntu 10.04. Chaque fois que je lance make clean, J'ai compris:

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 ça ne marche pas?

EDIT: Il semble que faire:

make -f Makefile.txt clean

travaux. Maintenant: y a-t-il un paramètre à modifier, donc je n'ai pas à faire le -f Makefile.txt à chaque fois?

20
jasonbogd

Il semble que le nom de votre makefile ne soit pas "Makefile" ou "makefile". Dans le cas où il est différent, dites "abc", essayez d'exécuter "make -f abc clean"

21
Siddique

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 recherche makefile, Makefile et GNUMakefile comme fichier d'entrée et vous rencontrez Makefile.txt dans votre dossier. Il suffit de supprimer l'extension de fichier (.txt) et cela devrait fonctionner.

7

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

2
Spaceghost

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

Cependant, cette erreur ne conduit pas à une erreur "Aucune règle pour faire la cible ...". Cela signifie probablement que votre problème se situe au-delà de votre Makefile. Avez-vous vérifié qu'il s'agit du Makefile correct, comme dans celui que vous souhaitez spécifier vos commandes? Essayez de le passer explicitement comme paramètre pour créer, make -f Makefile et dites-nous ce qui se passe.

2
Michael Foukarakis

Cela fonctionne pour moi. Voulez-vous vraiment indenter avec des onglets?

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
1
Simone