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

Systèmes de compilation Discussion :

Makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 82
    Points : 54
    Points
    54
    Par défaut Makefile
    J'ai deux fichiers makefile, un pour mon client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Client: Client.o	# generate executable from objects
    	gcc Client.o -o Client
     
    Client.o:	Client.c
    	gcc -c Client.c
    et un pour mon serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Server: Server_functions.o Server.o Server_main.o	# generate executable from objects
    	gcc Server_functions.o Server.o Server_main.o -o Server 
     
    Server_functions.o:    Server_functions.c
    	gcc -c Server_functions.c
     
    Server.o:   Server.c
    	gcc -c Server.c
     
    Server_main.o:   Server_main.c
    	gcc -c Server_main.c
    Comment je fais pour les réunir dans un seul fichier makefile?

  2. #2
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 334
    Points : 130 265
    Points
    130 265
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    all: Client Serveur
     
    ... suivi du contenu du Makefile de Client ...
     
    ... suivi du contenu du Makefile de Serveur ...
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  3. #3
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    Ou tu peux faire un makefile propre :
    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
    CC=gcc
    CFLAGS=-Wall
    OBJECTS_CLIENT=client.o
    OBJECTS_SERVER=server.o server_main.o server_functions.o
    BIN_CLIENT=client
    BIN_SERVER=server
     
    all: client server
     
    client: $(OBJECTS_CLIENT)
    <tab>@echo "Liaison du client"
    <tab>$(CC) $(OBJECTS_CLIENT) -o $(BIN_CLIENT) $(CFLAGS)
     
    server: $(OBJECTS_CLIENT)
    <tab>@echo "Liaison du serveur"
    <tab>$(CC) $(OBJECTS_CLIENT) -o $(BIN_CLIENT) $(CFLAGS)
     
    %.o: %.c
    <tab>@echo "Compile l'objet $@"
    <tab>@$(CC) -c $(CFLAGS) -o $@ $(basename $@).c
    L'intérêt est que c'est plus court, et largement plus configurable ! Exemple, en release tu changes CFLAGS en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFLAGS=-Wall -O3 -DRELEASE
    (-DRELEASE équivaut à faire #define RELEASE dans tous les fichiers sources)

    Perso, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Mode release ?
    #RELEASE=1
     
    CXXFLAGS:=-Wall
    ifdef RELEASE
      CXXFLAGS+=-O2 -DRELEASE
    else
      CXXFLAGS+=-g
    endif
    Ici RELEASE est en commentaire.

    Après tu peux encore l'améliorer en créant dynamiquement la liste des objets avec wildcards et patsubst :
    LISTE_OBJECTS=$(patsubst %.c,%.o,$(wildcard *.c))

    C'est génial GNU Make !

    @+ Haypo

Discussions similaires

  1. Problème avec makefile
    Par snooopppp dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 22/02/2004, 15h46
  2. Makefile et sed
    Par pitistef dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 10/02/2004, 15h06
  3. [Makefile] [Avancé]Récupération de dépendances
    Par Ruok dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 06/02/2004, 12h52
  4. [Debutant] Makefile
    Par Jfrancois57 dans le forum Systèmes de compilation
    Réponses: 8
    Dernier message: 26/01/2004, 13h18
  5. Compilation avec un Makefile
    Par Mau dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/02/2003, 11h30

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