Problème création d'un makefile

Signaler
Messages postés
14
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 décembre 2012
-
Messages postés
14
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 décembre 2012
-
Bonjour, j'ai un souci sur un projet que je dois faire au plus vite, je dois faire un makefile permettant de créer un exécutable du projet, seulement voila mes sources sont organisées comme suit:
-le dossier de mon projet "ProjetC" contient le fichier Makefile et le dossier "sources"
-le dossier "sources" contient un sous-dossier "fichiers.c" et un sous-dossier "fichiers.h"
-pour faire un test j'ai mis dans le sous-dossier "fichiers.h" le fichier source "personnes.h" et dans le sous-dossier "fichiers.c" les fichiers "personnes.c" et "main.c" utilisant "personne.h"

-j'ai donc créer un Makefile permettant de créer un ficher exec des trois scripts "personnes.h", "personnes.c" et "main.c":

CFLAGS=-Wall -ansi

exec : personnes.o main.o
gcc $(CFLAGS) -o personnes.o main.o

personnes.o: personnes.c
gcc -c $(CFLAGS) ./sources/fichiers.c/personnes.c

main.o: main.c personnes.h
gcc -c $(CFLAGS) ./sources/fichiers.c/main.c



seulement quand j'exécute la commande "make -f ./Makefile"

on m'envoie comme message d'erreur: "make -f ./Makefile
make: *** Pas de règle pour fabriquer la cible « personnes.c », nécessaire pour « personnes.o ». Arrêt."

Je ne comprend pas trop ce que je dois faire car c'est la première fois que j'éssai de faire un makefile.

Est-ce quelqu'un pourrait m'apporter son aide ?
Merci d'avance.

6 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Place plutôt tes headers dans un répertoire nommé include (fais comme tout le monde). Logiquement un makefile comme ça devrait aller (utilise make all pour le lancer) :
CFLAGS = -Wall -ansi
OBJETS = personnes.o main.o

all: personnes.o main.o
gcc -o programme $(OBJETS)
chmod +x programme

personnes.o:
gcc -c $(CFLAGS) -o personnes.o personnes.c

main.o:
gcc -c $(CFLAGS) -o main.o main.c

---
VB.NET is good ... VB6 is better
Messages postés
14
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 décembre 2012

Je viens de faire ce que tu m'as indiqué, le message suivant s'affiche:

gcc -c -Wall -ansi -o personnes.o ./sources/fichiers.c/personnes.c
gcc -c -Wall -ansi -o main.o ./sources/fichiers.c/main.c
gcc -o programme personnes.o main.o
chmod +x programme
make: Rien à faire pour « Makefile ».

Je ne sais pas si le fait qu'il m'affiche "make: Rien à faire pour « Makefile »." est normal toujours est-il que l'executable "programme" est crée et se lance correctement.

Je te remercie de ton aide
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Renomme comme je t'ai dis tes répertoires (un répertoire portant le nom du programme contenant les fichiers source et un sous-répertoire include contenant les headers) et place le makefile dans le répertoire du programme. Tu peux y ajouter le target clean qui te permettra de supprimer les fichiers objets :
clean:
rm $(OBJETS)

---
VB.NET is good ... VB6 is better
Messages postés
14
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 décembre 2012

Je viens de le faire, ça marche aussi quand le renomme les dossiers des .h en "headers". Je fait make -f ./Makefile et tout marche niquel.
Manque plus qu'un petit script shell et tout sera niquel

Merci encore.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Le nom communément utilisé est include. Autant faire comme les pros !
---
VB.NET is good ... VB6 is better
Messages postés
14
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 décembre 2012

Je le sais bien. Seulement mes profs tiennent absolument à ce qu'on le nomme "headers". Pas besoin de chercher la logique quand il n'y en a pas
Mais c'est évident que quand j'irai bosser il y a certaines choses abérantes que j'oublierai fissa.