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 :

inclure bibliotheque dans makefile


Sujet :

Systèmes de compilation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut inclure bibliotheque dans makefile
    Bonjour a tous,
    J'ai un probleme concernant un makefile, j'ai tapé toutes mes lignes de compilation mais arrivé a la fin je me suis demandé comment lier une biblliotheque qui ne se trouve pas dans le meme repertoire? Et comment doit on la lier? Car au debut cette bibliotheque était dans mon repertoire courant donc je l'incluais en debut de mon programme mais maintenant comment faire?

    Du coup je me demande aussi comment compiler avec un makefile plusieur fichiers ne se trouvant pas dans le meme repertoire?
    Merci a tous

  2. #2
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Dans le cas où tu utilises gcc sous Linux (pour Windows, je ne sais pas, mais ça devrait être pariel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc prog.c -Lchemin -lXXX -o prog
    chemin est le chemin du répertoire où se trouve la bibliothèque
    et XXX son nom .
    Wer nicht probiert, verliert !!

  3. #3
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    je me permets d'ajouter un petit détail.
    Sauf erreur de ma part, il faut que le nom de ta librairie soit du précédé de lib et qu'elle ait l'extension .a. Ce qui donnerait libXXX.a
    Mais dans l'option -l, tu n'indiques que le radical, soit -lXXX.
    Ensuite gcc retrouvera ta librairie.

  4. #4
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Je pense que cela marche également pour des librairies dynamiques, donc avec l'extension .so
    Wer nicht probiert, verliert !!

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    merci pour ces reponses.
    Maintenant si je mets mon 'main' dans un autre repertoire mon fichier de fonctions dans un autre et ma librairie dans un troisieme comment dois je faire? voici mon makefile:

    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
     
    INCLUDE_LIB := ../../Library/lib/tools.lib
    INCLUDE_DIR	:= ../C ../../Library/include
    SRC_DIR 	:= ../C
    MODULE_DIR	:=
     
    CC		= gcc
    CFLAGS	= -W -O2 -Wall 
    LDFLAGS	= -L $(INCLUDE_DIR) libfilter_lib.a 
    EXEC		= Filter
    SRC		= $(wildcard $(SRC_DIR)/* .c)
    OBJ		= $(SRC:.c=.o)
     
    all: 	$(EXEC)
     
    filter: $(OBJ)
    	@$(CC) -o $@ $^ $(LDFLAGS)
     
    Filter_main.o: Filter_func.h Filter_var.h filter_lib.h
    %.o: %.c
    	@$(CC) -o $@ $< $(CFLAGS)
     
    .phony: clean mrproper
     
    clean:
    	@rm -rf *.o
    mrproper: clean
    	@rm -rf $(EXEC)
    mais j'ai des problemes de regles
    Merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Voici mon organisation de repertoire:
    Je voudrai donc que mon makefile compile mon programme contenu dans le dossier C en passant par le main qui lui est dans Etest, les librairies données par mon prof sont dans un autre dossier.
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    tpC
     |_tp5
     |   |_ C          -> [ contient mes fonctions ] 
     |   |_ Etest     -> [ contient mon main et mon makefile]
     |
     |_Library 
            |___include -> [contien les .h de librairies]
            |___lib       -> [contient un .lib regroupant toute les lib]

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Voici le message d'erreur je ne comprend pas j'ai pourtant specifier la cible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make: *** No rule to make target `Filter', needed by `all'.  Stop.

  8. #8
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    je ne suis pas sûr mais tu as peut être un souci de casse, non ?

    EXEC = Filter
    ...
    filter: $(OBJ)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Oui j'avais ce probleme la. Merci comme quoi des fois on cherche cherche trop loin.
    Maintenant j'ai plus de resultats (incorrect certes) que je ne comprend pas:

    process_begin: CreateProcess((null), gcc -o ../C/Filter.o ../C/Filter.c -W -O2 -Wall, ...) failed.
    make (e=2): The system cannot find the file specified.
    make: *** [../C/Filter.o] Error 2

    Peut etre est ce ma demarche qui n'est pas correcte je voudrais sortir de l'envirronement Visual pour pouvoir générer mes executables C'est pour cela que je suis passé par un makefile, j'ai lu les tutos de developpez.com au préalable mais peut etre me manque t il quelque chose.
    Merci

  10. #10
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    je ne suis pas un pro dans les makefile,
    mais visiblement, selon le message d'erreur, il ne trouve pas le fichier [../C/Filter.o].
    Peux-tu vérifier qu'il est créé et qu'il est bien à cet emplacement ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    Non il n'y a rien de créé.
    Je n'arrive pas a voir pourquoi car j'ai spécifié que tout les .c du repertoire devaient etre mis en .o
    Je vais essayer de refaire le makefile sans toutes les simplifications peut etre sa m'aidera a y voir plus clair.
    Merci

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut
    En fait j'ai manqué une étape de base.
    Car meme en faisant le makefile sur hello.. presente dans developpez.com sa ne marche pas j'ai la meme erreur. Et vu que je suis sous xp il doit surement rajouter quelque chose par rapport a linux. Peut etre que sous windows je suis perdu...
    merci

  13. #13
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    je ne peux pas te dire car je compile sous mac ou sous linux.
    Est ce que tu peux faire man gcc dans la commande ?
    Auquel cas tu verras les options disponibles.

    Pour t'aider, regarde aussi si ton IDE ne peut pas générer un makefile pour te donner une idée de l'enchainement.

  14. #14
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Salut,
    ca ne viendrais pas de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filter_main.o: Filter_func.h Filter_var.h filter_lib.h
    Filter_func.h n'est pas dans le repertoire courant, il faudrait mettre le chemin complet non ?
    b Oo

Discussions similaires

  1. inclure bibliotheque dans makefile
    Par sone47 dans le forum C
    Réponses: 1
    Dernier message: 05/06/2007, 15h07
  2. inclure jar dans une Applet
    Par inseaiste dans le forum Applets
    Réponses: 6
    Dernier message: 24/07/2006, 14h49
  3. Inclure vi dans un script shell
    Par PierrotY dans le forum Linux
    Réponses: 3
    Dernier message: 18/05/2006, 09h28
  4. inclure installation dans installeur
    Par pitch21 dans le forum Installation
    Réponses: 3
    Dernier message: 24/02/2006, 09h16
  5. [VB.NET] Inclure MSDE dans le package
    Par SergeF dans le forum EDI/Outils
    Réponses: 4
    Dernier message: 24/06/2004, 21h18

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