Gestion des dépendances des fichiers headers dans un Makefile [Résolu]

matt1038 3 Messages postés mercredi 9 février 2011Date d'inscription 9 février 2011 Dernière intervention - 9 févr. 2011 à 12:34 - Dernière réponse : matt1038 3 Messages postés mercredi 9 février 2011Date d'inscription 9 février 2011 Dernière intervention
- 9 févr. 2011 à 17:34
Bonjour,

J'ai fait un petit programme de test avec son Makefile associé et je n'arrive pas à gérer les dépendances entre les fichiers .c et les fichiers .h
Dans mon programme, main.c dépend de hello.h donc j'ai ajouté la ligne suivante dans le Makefile:
main.o: hello.h
Lorsque je modifie hello.h et que je recompile, rien ne se passe car il estime qu'il n'y a aucune modification.

Voici mon Makefile:

CC=gcc
SUBDIR=/home/utilisateur/dev/test
CFLAGS=-Wall -I$(SUBDIR)/inc
LDFLAGS=
SRC= $(wildcard $(SUBDIR)/src/*.c)
OBJ= $(SRC:.c=.o)
EXEC=hello

all: $(EXEC)

$(EXEC): $(OBJ)
@$(CC) -o $@ $^ $(LDFLAGS)

main.o: hello.h

%.o: %.c
@$(CC) -o $@ -c $< $(CFLAGS)

Pouvez-vous m'éclairez svp?
Merci d'avance.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cptpingu 3807 Messages postés dimanche 12 décembre 2004Date d'inscription 21 septembre 2018 Dernière intervention - 9 févr. 2011 à 15:53
3
Merci
Ok j'ai compris ce que tu voulais faire ! (Je n'ai pas compris tout de suite).

Si tu as besoin de faire de la dépendance avec les headers, tu peux utiliser gcc -MM qui génère une règle de dépendance directement au format Makefile ! (Exemple crade: gcc -MM *.c)

Je t'invite à regarde une de mes sources où je réalise cette technique:
http://www.cppfrance.com/codes/COMPILATEUR-PSEUDO-PASCAL_49318.aspx

(Voire le configure, le Makefile et le src/Makefile)

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Merci cptpingu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cptpingu
cptpingu 3807 Messages postés dimanche 12 décembre 2004Date d'inscription 21 septembre 2018 Dernière intervention - 9 févr. 2011 à 14:23
0
Merci
Tu ne dépend pas de main.o, ce n'est pas ton problème ?

$(EXEC): $(OBJ) main.o
@$(CC) -o $@ $^ $(LDFLAGS)

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
    
Commenter la réponse de cptpingu
matt1038 3 Messages postés mercredi 9 février 2011Date d'inscription 9 février 2011 Dernière intervention - 9 févr. 2011 à 15:41
0
Merci
Merci pour ta réponse mais cela ne règle pas mon problème.
En effet, l'instruction "OBJ= $(SRC:.c=.o)" rempli OBJ avec tous les noms de fichier.c en les transformant en .o
Ainsi, OBJ contient main.o et hello.o
Je souhaiterais que lorsque je modifie hello.h, le fichier "main.c" (le hello.c également en fait, j'ai oublié de le mentionner) soit recompilé.
Commenter la réponse de matt1038
matt1038 3 Messages postés mercredi 9 février 2011Date d'inscription 9 février 2011 Dernière intervention - 9 févr. 2011 à 17:34
0
Merci
Ca marche!!
J'avais déjà essayé avec la méthode gcc -MM mais sans succès car il y avait une ou 2 erreurs dans mon Makefile.
J'ai enfin réussi grâce à ton exemple pour le mini-compilateur.

Merci beaucoup pour ton aide!
Commenter la réponse de matt1038

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.