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 :

Makefile et commande ar


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Par défaut Makefile et commande ar
    Bonjour,
    J'ai un makefile à faire dans le cadre de mon projet mais je n'arrive pas à trouver comment faire pour que tous les .o soient regroupées et que çà crée un .a à la fin du make.
    Voici le makefile :

    SOURCES=main.cpp fonctions.cpp
    EXECUTABLE=monprogramme
    CC=gcc
    CXXFLAGS=-c -Wall
    LDFLAGS=
    OBJECTS=$(SOURCES:.cpp=.o)
    all: $(SOURCES) $(EXECUTABLE)
    $(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@
    .cpp.o:
    $(CC) $(CXXFLAGS) $< -o $@
    .PHONY: clean
    clean:
    rm -f *.o $(EXECUTABLE)


    ET je voudrais faire en sorte d'ajouter dans ce makefile la commande :
    ar cq libfoncs.a main.o fonctions.o
    Savez-vous où je dois mettre cette ligne pour qu'elle soit exécuté ?
    Merci pour vos réponses.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 442
    Par défaut
    Bonjour,

    Avant toute chose, as-tu l'habitude des Makefile ? Sais-tu bien comment ils fonctionnent et à quoi ils servent, ou faut-il revenir un peu dessus ?

    Concernant tes libs statiques, un fichier « *.a » est une archive créée avec la commande historique « ar » qui, en gros, concatène tous les fichiers passés les uns à la suite des autres. Donc, une lib statique sous UNIX est un gros fichier qui contient tous les *.o à l'intention du compilateur, sans autre forme de procès. Mais un fichier « *.a » peut contenir n'importe quoi. Ce n'est pas forcément en soi une bibliothèque.

    Du coup, dans « ar cq », il faudrait déjà retirer « q » (Quick append), qui sert à ajouter directement les fichiers à la fin de l'archive existante, sans même vérifier s'ils sont déjà dedans. Donc, ton archive grossirait à chaque recompilation. À la place, à chaque fois que l'on reconstruit l'archive, on souhaite effacer la précédente et la recréer à partir des fichiers que l'on souhaite y intégrer.

    Ensuite, on souhaite reconstruire l'archive si les fichiers qu'elle est censée contenir sont plus récents qu'elles, ou s'ils n'existent pas (auquel cas, il faudra reconstruire ces fichiers auparavant). Il s'agit donc d'une dépendance au même titre que les fichiers *.c. Donc, il faut créer une règle qui porte le nom de l'archive à créer, et qui contienne les dépendances, c'est-à-dire les fichiers à y intégrer.

    Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
    libfoncs.a: main.o fonctions.o

    Ensuite, tu y ajoutes la commande que tu nous a donné, en remplaçant le nom de l'archive à créer par le nom de la cible, donc $@, suivi de la liste des fichiers à inclure, donc les dépendances, donc avec $^ .

    Enfin, le succès de ton projet dépend — entre autres — de la bonne création de ce fichier. Donc la cible « all » doit avoir pour dépendance le nom de cette archive, pour qu'elle soit créée si besoin quand tu fais « make », ce que tu cherches à faire.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Par défaut
    Bonsoir,

    J'ai finalement résolu mon problème. Merci bien !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/01/2015, 19h45
  2. une commande dans Makefile
    Par lazo61 dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 21/02/2009, 11h31
  3. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

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