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

Linux Discussion :

[Débutant] l'utilité et l'avantage d'un Makefile


Sujet :

Linux

  1. #1
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Points : 96
    Points
    96
    Par défaut [Débutant] l'utilité et l'avantage d'un Makefile
    Bonjour,

    voilà j'ai vu et tester quelque exemple de réalisation d'un Makfile
    dans ce tuto: http://gl.developpez.com/tutoriel/outil/makefile/
    avec la commande (sous ubuntu): sa marche relativement bien.

    Mais je n'arrive pas à saisir l'intérêt de faire des Makefile ?

    et aussi je me demande si son utilisation est spécifique au langage C, si Non sur quel autre langage en peu l'utiliser ?

    J'ai aussi trouver en fouillant un peu des outils plus générique du genre SCons ou CMake qui permet de gérer plusieurs plateformes / compilateurs.

    Je me demande si en peut pas faire ça directement avec un Makefile simple !, Alors c'est quoi l'avantage de faire avec ces outils. ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Wikipédia explique assez bien l'outil :

    À la différence d'un simple script shell, make exécute les commandes seulement si elles sont nécessaires. Le but est d'arriver à un résultat (logiciel compilé ou installé, documentation créée, etc.) sans nécessairement refaire toutes les étapes.

    En gros, l'avantage du makefile c'est de pouvoir faire des dépendances entre certains fichiers à compiler (par exemple), en se passant de certaines étapes si elles ont déjà été faites. Exemple : tu as 15 fichiers à compiler pour ton projet, mais tu n'as modifié que main.c qui dépend des 14 autres. Seul main.c sera recompilé.
    Gain de temps, coût de compilation moindre.

    Le makefile peut s'adapter à tous les langages il me semble.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bilred Voir le message
    Bonjour,

    voilà j'ai vu et tester quelque exemple de réalisation d'un Makfile
    dans ce tuto: http://gl.developpez.com/tutoriel/outil/makefile/
    avec la commande (sous ubuntu): sa marche relativement bien.

    Mais je n'arrive pas à saisir l'intérêt de faire des Makefile ?
    Isythiel a bien résumé le truc. Je vais y rajouter l'exemple de la compilation de la librairie Qt. La compilation entière (from scratch) de cette librairie dure, sur ma machine, 2h20. Et j'ai vu des machines moins performantes où la compilation prenait plus de 4h (je la lançais le soir et allais voir le résultat le lendemain). Ben vaut mieux avoir un makefile qui se charge de ne recompiler ensuite que ce qu'il faut...

    Citation Envoyé par bilred Voir le message
    et aussi je me demande si son utilisation est spécifique au langage C, si Non sur quel autre langage en peu l'utiliser ?
    Le makefile a pour but de symboliser les dépendances entre fichier X et fichier Y. Ca se traduit par "pour faire un fichier Y à partir d'un fichier X, il faut faire telle et telle action". C'est à toi de coder les actions appropriées dans le makefile (ça peut aller du simple cp à la compilation de 40000 sources pour créer une librairie) et les actions sont des appels aux programmes de transformation/compilation. Ces appels sont donc codés dans la syntaxe de ton shell de travail mais les programmes de compilation/transformation, eux, sont écrits dans n'importe quel langage. Tu peux même écrire ton propre programme et le faire appeler ensuite par n'importe quel makefile. Suffit juste de lui donner le chemin d'accès à ton programme.

    Par ailleurs, bien que le makefile serve dans 95% des cas à compiler du C, il peut servir à n'importe quoi d'autre. En fait, il est associé au C et C++ car ce sont les langages de conception d'Unix/Linux. Comme Unix/Linux a été écrit en C, il est plus pratique, si on veut taper dans le système, d'écrire ses codes en C (ou en C++ qui englobe le C). Et donc c'est parce que la majorité des codes sont écrits en C que le makefile ne compile quasiment que du C.

    Citation Envoyé par bilred Voir le message
    J'ai aussi trouver en fouillant un peu des outils plus générique du genre SCons ou CMake qui permet de gérer plusieurs plateformes / compilateurs.

    Je me demande si en peut pas faire ça directement avec un Makefile simple !, Alors c'est quoi l'avantage de faire avec ces outils. ?
    C'est toujours le problème de la machine qui sert à fabriquer la machine qui sert à fabriquer la machine qui sert à moudre le blé. Si tu dois moudre un grain de blé, tu prendras un marteau. Si tu dois moudre un épi de blé, tu prendras un mortier et une écuelle. Si tu dois moudre un sac de blé, tu prendras un petit robot mixer. Et si tu dois moudre un champ de blé, tu prendras un moulin. Ben là c'est pareil.
    Pour un petit code, tu tapes directement gcc. Si ton code commence à avoir 5 ou 6 sources, autant de .h, qu'ils sont organisés en domaines (codes pour la bdd, codes pour l'ihm, codes pour les calculs) avec création de librairies intermédiaires pour associer tout ça dans un joli programme final, et que t'en as marre, à chaque fois que tu touches à un truc, de recompiler tout le projet à chaque fois (même si ça ne prend que 35 secondes, quand tu lances ta compilation pour la quinzième fois tu commences à les sentir passer) tu prendras l'habitude d'écrire le makefile approprié.
    Et si tu veux recompiler un gros projet qui va taper dans du Qt pour l'IHM, dans du gd pour les graphiques, dans du PostgreSQL pour la bdd etc, et que tu dois travailler indépendamment pour du zindow ou du Linux, ben tu passeras par des outils plus complexes qui seront chiadés à paramétrer mais qui pourront te générer des makefile énormes pour compiler tout ça.

Discussions similaires

  1. Utilité/Avantage de JOIN?
    Par Oussama_Gabes dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/01/2011, 12h06
  2. [Débutant] avantages des DB et choix type de DB
    Par L. Sierra dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 12/09/2008, 17h31
  3. [débutant] utilité de webservices
    Par etoile_de_vie dans le forum C#
    Réponses: 1
    Dernier message: 20/02/2008, 11h17
  4. [débutant] Utilité de clone dans Object ?
    Par dabeuliou dans le forum Langage
    Réponses: 10
    Dernier message: 27/02/2007, 13h31
  5. [Débutant] Utilité de l'héritage...?
    Par Sylvester dans le forum Langage
    Réponses: 4
    Dernier message: 14/03/2006, 11h48

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