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

Shell et commandes GNU Discussion :

Création de makefile pour librairie dynamique


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut Création de makefile pour librairie dynamique
    bonjour à tous,

    J'espère poster au bon endroit ...
    Je vais essayer d'être compréhensible, voici mon problème, j'ai créé un programme qui est conçu comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                                   /------ src --- fichiers .c
    répertoire du projet       --/------- modules ---- fichiers .c
                                  \------- include  ---- fichier .h
                                   \------ config  --- on s'en fou
    Mon problème c'est de compiler tout ça. Je ne m'étais jamais vraiment arrêté sur la création de makefile et là que je veux en plus compiler des libraires dynamiques contenues dans le répertoire modules/ je suis complètement perdu.

    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    As-tu déjà essayé quelque chose ? Si oui, tu devrais nous le mettre pour que l'on puisse avoir une base pour t'aider.

    Dans modules, tu as plusieurs modules ?

    Lilian.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    salut lilian

    le Makefile de base (celui a la racine du projet)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    all: build
     
    build:
        cd src; make
    celui dans le repertoire src/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CC = gcc
    CFLAGS = -O2 -Wall -I"../include"
    BIN = services
    OBJ = main.o services.o
     
    all: $(OBJ)
        $(CC) $(OBJ) -o $(BIN)
        mv -f $(BIN) ..
     
    %.o: %.c
        $(CC) -c $< -o $@ $(CFLAGS)
    Oui il y aura plusieurs modules de base, que je dois compiler en tant que librairie dynamique ensuite c'est l'utilisateur du programme qui sélectionnera via un fichier de configuration quels modules il veut charger.

    J'imagine qu'il faut que je crée aussi un makefile dans le répertoire modules/ pour les compiler mais après comment faire le lien entre mon exécutable qui se trouvera à la racine et les modules compilés qui se trouvent dans un autre répertoire ?

    merci d'avoir pris le temps de me répondre

  4. #4
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    Je te recommanderais d'avoir un makefile père à la racine de te projet. Il fera un include des makefile en dessous en fonction de ce que tu as besoins de générer.

    Pour le père, qlq chose du genre:

    mon_makefile.mk :
    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
    26
    27
    28
    29
    30
    31
    32
     
    PROG_MK=$(shell (if test -n "$(PROG)" ; then find . -name $(PROG).mk ; fi ))
    TMP_DIR=bin
     
    include  $(PROG_MK)
     
    OBJS=$(SRCS:.c=.o)
    OBJ_LST=$(shell (for obj in $(OBJS) ; do echo "$(TMP_DIR)/$$obj" ; done))
     
    vpath %.c $(DIRS)
    $(TMP_DIR)/%.o: %.c
    	@echo "Generation de l'objet $@ avec $?"
    	touch $@
     
    $(TMP_DIR)/%.c: %.c
    	@echo "Copie de $? dans $@"
    	cp $? $@
     
    $(TMP_DIR)/$(PROG) : $(OBJ_LST)
    	@echo "Edition des liens"
    	touch $@
    	@echo "Build OK"
     
     
    all : $(TMP_DIR) $(TMP_DIR)/$(PROG)
     
     
    $(TMP_DIR) : 
    	mkdir -p $(TMP_DIR)
     
    clean :
    	rm -rf $(TMP_DIR)
    Et pour les makefiles fils, dans les place dans les dossiers respectifs de là où sont les sources, et contiennent, le strict minimum, à savoir la listes des sources, des dossiers où trouver les sources, et les options de compilations.

    Exemple:

    src/mon_prog.mk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SRCS=\
    main.c \
    src1.c \
    src2.c \
     
    DIRS=include src
     
    CFLAGS=-O2 -Wall
    Pour complier ton mon_prog tu appel make de cette manière:
    make -f mon_makefile.mk PROG=mon_prog

    Je pense qu'en faisant comme ça, tu pourras facilement faire le lien entre ton programme et tes modules à partir du makefile père.

    Il reste surement des trucs à régler à gauche ou à droite, mais tu as une bonne base.

    Lilian.

Discussions similaires

  1. Création d'un librairie dynamique
    Par Crabe05 dans le forum C++
    Réponses: 1
    Dernier message: 02/01/2009, 12h12
  2. Création d'un librairie dynamique avec Qt
    Par Crabe05 dans le forum Qt
    Réponses: 11
    Dernier message: 02/01/2009, 11h11
  3. Réponses: 3
    Dernier message: 30/05/2008, 10h59
  4. Création d'un makefile pour compilation automatique
    Par freestyler dans le forum Delphi
    Réponses: 48
    Dernier message: 08/06/2007, 14h47
  5. création d'une librairie dynamique
    Par bilo2000 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 26/08/2004, 15h17

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