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

 C Discussion :

Compilation modulaire avec makefile et plusieurs implantations


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut Compilation modulaire avec makefile et plusieurs implantations
    Bonsoir à tous !

    J'ai créé 3 implantations pour un type de liste, les noms de fonctions et autres déclarations sont les mêmes pour chaque implantations.
    J'aimerai savoir s'il y a un moyen de créer un seul fichier test.c, et avec un makefile de créer 3 executables (test1, test2, test3) dont chacun serait fait ave une implantation différente.

    J'ai essayé de bidouillé avec l'option -D de gcc mais cela n'a rien donné de concluant...

    Merci d'avance à qui pourra m'aider ou m'orienter

  2. #2
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    Bonsoir,
    C'est possible avec l'option -D de gcc comme tu as essayé , un exemple :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    int main ()
    {
    #ifdef ONE 
       printf("1\n");
       return(0);
    #endif
    #ifdef TOW
       printf("2\n");
       return 0;
    #endif
    }
    Par contre si tu veux ne faire qu'un seul makefile , il faut ajouter les précédents exécutables dans les exécutables à faire ensuite , sinon il ne fera que l’exécutable de la première ligne .
    Voici un exemple pour le code fourni ci dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1: test.c 2
    	gcc -D ONE test.c -o 1
    2: test.c
    	gcc -D TOW test.c -o 2

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Hmmmm... Je ne comprends pas trop...

    Mes fichiers sont comme ceci :
    [src]
    ----makefile
    ----test.c
    ----[list1]
    --------list1.h
    --------list1.c
    ----[list2]
    --------list2.h
    --------list2.c
    ----[list3]
    --------list3.h
    --------list3.c

    J'ai essayé de mettre -DLIST1 en option de compil', avec le code suivant dans test.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifdef LIST1
    #include list1/list1.h
    #endif
    Mais ça ne marche pas...

  4. #4
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    Je ne sais pas exactement ce que tu veux mettre dans ton test.c mais imaginons que c'est ça :
    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
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
    #ifdef LIST1
        #include "list1/list1.h"
    #endif
    #ifdef LIST2
        #include "list2/list2.h"
    #endif
    #ifdef LIST3
        #include "list3/list3.h"
    #endif
     
    int main()
    {
    #ifdef LIST1
        /** code pour list1 **/
    #endif
    #ifdef LIST2
        /** code pour list2 **/
    #endif
    #ifdef LIST3
        /** code pour list3 **/
    #endif
     
        return 0;
    }
    Ton makefile devrait ressembler à ça : ( si je ne dis pas n'importe quoi , je ne l'ai pas testé )
    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
    list1Prog: test1.o list1.o list2Prog
    	gcc test1.o list1.o -o list1Prog
    list2Prog: test2.o list2.o list3Prog
    	gcc test2.o list2.o -o list2Prog
    list3Prog: test3.o list3.o
    	gcc test3.o list3.o -o list3Prog
    test1.o: test.c 
    	gcc -c -D LIST1 test.c -o test1.o
    test2.o: test.c 
    	gcc -c -D LIST2 test.c -o test2.o
    test3.o: test.c 
    	gcc -c -D LIST3 test.c -o test3.o
    list1.o: ./list1/list1.c ./list1/list1.h
    	gcc -c ./list1/list1.c
    list2.o: ./list2/list2.c ./list2/list2.h
    	gcc -c ./list2/list2.c
    list3.o: ./list3/list3.c ./list3/list3.h
    	gcc -c ./list3/list3.c

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Mon code ressemblerait plutôt à ceci :
    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
     
    #include <stdio.h>
    #ifdef LIST1
        #include list1/list1.h
    #endif
    #ifdef LIST2
        #include list2/list2.h
    #endif
    #ifdef LIST3
        #include list3/list3.h
    #endif
     
    int main()
    {
      /* code sur les listes, chaque fichier .h contient les mêmes prototypes de fonctions, donc pas de différenciations */
        return 0;
    }
    Je suis fatigué, je testerai demain et repasserai pour dire ce que ça donne

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    J'ai testé pour une seule implantation de liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    test: test.o ./list1/list1.o
        gcc test.o ./list1/list1.o -o test
     
    test.o : test.c
        gcc -c -D LIST1 test.c -o test.o
    ./list1/list1.o : ./list1/list1.c ./list1/list1.h
        gcc -c ./list1/list1.c
    Ca ne marche pas.
    La macro LIST1 créée avec "-D LIST1" ne semble pas exister lors de la compilation de test.c.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. code::blocks vs compilation avec Makefile (qmake)
    Par ostralo dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 08/04/2008, 13h39
  2. Erreur de compilation C++ avec Makefile
    Par ChipsterJulien dans le forum C++
    Réponses: 2
    Dernier message: 27/08/2007, 18h27
  3. Compilation avec makefile
    Par troumad dans le forum Systèmes de compilation
    Réponses: 13
    Dernier message: 28/03/2007, 16h58
  4. Objet avec options de compilation dans un makefile
    Par z980x dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 27/09/2006, 07h17
  5. Réponses: 1
    Dernier message: 18/06/2004, 01h12

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