IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Petite question sur les Makefiles


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Petite question sur les Makefiles
    Bonjour,

    Tout d'abord je ne sais pas si mon post se trouve au bon endroit
    Pardon si ce n'est pas le cas.

    Pour simplifier la compilation d'un projet C/Gtk+ j'ai écrit un jeu de Makefiles.

    Mon problème :
    Si je ne modife qu'un *.h et que je compile avec un "$ make" les changement ne sont pas pris en compte.
    "Rien à faire pour « all »." Sois-disant
    Je dois faire un "$ make clean" puis à nouveau un "$ make"

    Y a t-il une ligne spécifique à ajouter pour spécifier qu'il faut vérifier si un *.h a été modifé ?

    Merci !

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    comment as tu écrit ton makefile?

    as tu indiqué que les .h dans les dépendances de tes cible

    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fichier.o: fichier.cpp fichier.h
    (tab)g++ fichier.cpp -o fichier.o

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Euh... Je vais poster mes Makefiles pour plus de simplicité.

    Mon projet est structuré comme suit :

    [répertoire "racine"]
    [Sous-répertoire "includes"]
    [Sous-répertoire "main"]
    [Sous-répertoire "functions"]

    Makefile du répertoire "racine":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # ./Makefile
     
    CC = gcc
    CFLAGS = `pkg-config --libs --cflags gtk+-2.0` -Wall -Werror -pedantic -std=c99 -I ./includes
    OBJ = functions/*.o main/*.o
    NAME = myProg
     
    all:
    	make -C main
    	make -C functions
    	$(CC) $(OBJ) $(CFLAGS) -o $(NAME)
     
    clean:
    	make -C main clean
    	make -C functions clean
    	make -C includes clean
    	rm -f *~
    	rm -f $(NAME)
    Makefile du sous-répertoire "includes": (qui ne sert qu'au "clean")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # ./includes/Makefile
     
    clean:
    	rm -f *~
    Makefile du sous-répertoire "main":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # ./main/Makefile
     
    CC = gcc
    CFLAGS = `pkg-config --libs --cflags gtk+-2.0` -Wall -Werror -pedantic -std=c99 -I ../includes
    OBJ = main.o
     
    all: $(OBJ)
     
    %o: %c
    	$(CC) $(CFLAGS) -c $^ -o $@
     
    clean:
    	rm -f *.o
    	rm -f *~
    Makefile du sous-répertoire "functions":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # ./functions/Makefile
     
    CC = gcc
    CFLAGS = `pkg-config --libs --cflags gtk+-2.0` -Wall -Werror -pedantic -std=c99 -I ../includes 
    OBJ = afficherFenetre.o chiffrer.o dechiffrer.o
     
    all: $(OBJ)
     
    %o: %c
    	$(CC) $(CFLAGS) -c $^ -o $@
     
    clean: 
    	rm -f *.o
    	rm -f *~
    J'ai fais ça un peu à ma sauce, n'hesite pas à faire des commentaires sur ce qui ne vas pas.

    Merci !

  4. #4
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    effectivement .

    Peux tu essayer cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # ./main/Makefile
    
    CC = gcc
    CFLAGS = `pkg-config --libs --cflags gtk+-2.0` -Wall -Werror -pedantic -std=c99 -I ../includes
    OBJ = main.o
    
    all: $(OBJ)
    
    %.o: %.c %.h
    	$(CC) $(CFLAGS) -c $^ -o $@
    
    clean:
    	rm -f *.o
    	rm -f *~
    Cela ne résoudra pas le cas ou un .c dépend d'un .h d'un autre nom. mais au moins le cas des couples .c et .h ayant le même nom.

    Quelques liens utiles:
    http://iihm.imag.fr/blanch/howtos/GNUMake.html
    http://www.gnu.org/software/make/man...t_002dspecific
    http://www.gnu.org/software/make/man...icit-Variables

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Le fait d'ajouter "main.o: main.h" dans le Makefile principal ne marche pas.

    "make" ne fait toujours que vérifier si le .c a été modifié au quel cas il recomplie le .o utilisant dans le .h, si le .c n'est pas modifié il ne regarde pas le .h ...

    Enfin c'est ce que je conclus de mes petites experiences.

    Merci qu'en même !

    EDIT J'ai rien dis, avec un exemple plus simple ça marche

    Makefile:
    hello: hello.o functions.o
    g++ -o hello hello.o functions.o

    hello.o: hello.cpp functions.h
    g++ -c hello.cpp

    functions.o: functions.cpp functions.h
    g++ -c functions.cpp
    Compilations:
    [cheeseburger:~/src] blanch% make
    g++ -c hello.cpp
    g++ -c functions.cpp
    g++ -o hello hello.o functions.o

    [cheeseburger:~/src] blanch% touch hello.cpp
    [cheeseburger:~/src] blanch% make
    g++ -c hello.cpp
    g++ -o hello hello.o functions.o

    [cheeseburger:~/src] blanch% touch functions.h
    [cheeseburger:~/src] blanch% make
    g++ -c hello.cpp
    g++ -c functions.cpp
    g++ -o hello hello.o functions.o
    À savoir, eemples du le premier lien que tu m'ai donné

    Y a plus qu'a déterminer pourquoi ça ne marche pas pour moi

  6. #6
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Reposte ton makefile modifié pour voir ?

  7. #7
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par HechMan Voir le message
    Bonjour,

    Le fait d'ajouter "main.o: main.h" dans le Makefile principal ne marche pas.
    note: la suggestion en gras faite sur le makefile de "main" était aussi valable pour l'autre

Discussions similaires

  1. Petite question sur les conventions de nommage en Java
    Par implosion dans le forum Langage
    Réponses: 7
    Dernier message: 18/01/2006, 16h54
  2. Petites question sur les onglets...
    Par jarod_bx dans le forum Access
    Réponses: 1
    Dernier message: 20/12/2005, 19h45
  3. [ATL] Petite question sur les progress bar
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2005, 10h40
  4. Réponses: 3
    Dernier message: 08/12/2004, 14h58
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo