Pages : 1
#1 Le 15/05/2007, à 20:35
- coco1234
fichier makefile
Bonsoir,
Je fais un programme avec plusieurs module en C. voila mon makefile:
all : $(APPLI) clean
$(APPLI) : $(APPLI).o jour.o heure.o
gcc -Wall -I//home/coco/programme/jour $(APPLI).o jour.o heure.o -o $(APPLI)
$(APPLI).o : $(APPLI).c jour.h heure.h
gcc -Wal -c $(APPLI).c
$jour.o : $jour.c jour.h
gcc -Wall -c $jour.c
$heure.o : $heure.c heure.h
gcc -Wall -c $heure.c
clean : $(APPLI)
rm -f *.o
$make APPLI=testHeure
make: *** Pas de règle pour fabriquer la cible « jour.h », nécessaire pour « testHeure.o ». Arrêt.
merci pour votre aide
Hors ligne
#2 Le 15/05/2007, à 21:20
- RBC
Re : fichier makefile
C'est simple, tu as deux solutions
1) jour.h ne s'ecrit pas comme ca et il faut juste mettre la bonne orthographe dans ton makefile
2) jour.h est pas au même niveau que ton makefile. Je veux dire par là qu'il se trouve dans un autre repertoire, il te faut juste mettre le chemin devant jour.h
Voilà normalement ça devrai fonctionner avec une des deux méthodes sinon hésite pas à revenir je vérfirai le fil de temps en temps
Hors ligne
#3 Le 15/05/2007, à 21:29
- coco1234
Re : fichier makefile
oui en effet ils ne sont pas dans le meme repertoire, je pensais qu'on ecrivant :
-I//home/coco/programme/jour
dans le makefile ca arrangerai les choses!
je mets le chemin ou? au moment ou je fais #include "jour.h"ou dans le make file?
Hors ligne
#4 Le 15/05/2007, à 22:31
- trucutu
Re : fichier makefile
Le -I il faudrait plutôt le mettre pour l'étape de compilation (-c) de tes fichiers sources.
C'est quoi ces "$" partout devant tes noms de fichiers ? Je ne suis pas expert en Makefile, mais je pense qu'on doit utiliser des variables ($APPLI) ou les nom "en dur" mais pas un mix des 2 ....
La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !
Hors ligne
#5 Le 16/05/2007, à 08:07
- kaworu
Re : fichier makefile
Salut !
fait attention aussi, ta règle "clean" dépend de la règle "$(APPLI)", donc si tu apelle la règle "all" (qui dépend de "$(APPLI)" et "clean") c'est un peu redondant (y a deux fois "$(APPLI)". Dans certains cas (comme la compilation) c'est pas grave car make va pas recompiler le tout, mais dans d'autres cas le boulot est fait 2x. Voilà une règle "clean" :
clean :
@rm -f *.o &>/dev/null || echo "Nothing to Clean"
le || avec un echo permet de faire un clean sans fichier .o et que make ne crie pas (sinon rm retourne un code d'erreur et make aussi).
le @ au début de la ligne permet de masquer la commande à l'appel de la règle.
le &>/dev/null va cacher quand rm crie parce que il n'existe pas de fichiers .o
Dernière modification par kaworu (Le 16/05/2007, à 08:09)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#6 Le 16/05/2007, à 14:48
- coco1234
Re : fichier makefile
J'ai mis la regle "clean" que tu m'as dit mais ca me fait la meme erreur:
make: *** Pas de règle pour fabriquer la cible « cours.h », nécessaire pour « testCreneau.o ». Arrêt.
Je sais pas ou mettre le chemin de jour? dans mon répertoire programme il y deux dossiers jour et heure. voila comment j'ai essaye de faire
all : $(APPLI) clean
$(APPLI) : $(APPLI).o jour.o heure.o
gcc -Wall -I/programme/jour $(APPLI).o jour.o heure.o -o $(APPLI)
$(APPLI).o : $(APPLI).c jour.h heure.h
gcc -Wal -I/programme/jour -c $(APPLI).c
$jour.o : $jour.c jour.h
gcc -Wall -I/programme/jour -c $jour.c
$heure.o : $heure.c heure.h
gcc -Wall -I/programme/jour -c $heure.c
clean :
@rm -f *.o &>/dev/null || echo "Nothing to Clean"
j'ai pas mis le chemin dans l'entête de heure.c
Hors ligne
#7 Le 18/05/2007, à 02:25
- kaworu
Re : fichier makefile
Salut !
La règle clean que je t'ai donnée n'a rien à voir avec ton problème, qui trouve déjà sa réponse dans le poste de RBC.
essaye comme ça (tout ce que j'ai changé c'est rajouter le chemin correct) :
all : $(APPLI) clean
$(APPLI) : $(APPLI).o jour.o heure.o
gcc -Wall -I/programme/jour $(APPLI).o jour.o heure.o -o $(APPLI)
$(APPLI).o : $(APPLI).c jour.h heure.h
gcc -Wal -I/programme/jour -c $(APPLI).c
$jour.o : $jour.c programme/jour/jour.h
gcc -Wall -I/programme/jour -c $jour.c
$heure.o : $heure.c programme/jour/heure.h
gcc -Wall -I/programme/jour -c $heure.c
clean :
@rm -f *.o &>/dev/null || echo "Nothing to Clean"
Le problème ne viens de pas GCC, il vient de make directement.
tu dis que pour fabriquer heure.o il faut heure.c et heure.h
Make va d'abord voir si des fichiers nommés heure.c et heure.h existent. Comme il ne trouve pas heure.h parce qu'il est dans un autre répértoire, il va chercher des règles pour fabriquer jour.h, et comme il n'y en a pas, il te sort une erreur.
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
Pages : 1