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 :

Tutoriel Makefile [Tutoriel]


Sujet :

Systèmes de compilation

  1. #1
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut Tutoriel Makefile
    Voici une petite intoduction à l'écriture de Makefile : Introduction à Makefile.

    Vos remarques, commentaires, suggestions sont les bienvenues.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Points : 48
    Points
    48
    Par défaut
    J'ai survolé les codes ca m'a l'air tres bien, je vais le montrer aux stagiaires et aux nouveaux de la boite ou je taff car ils passent tous par cette apprentissage ca leurs fera guagner du temps

    Une belle suite logique ? Autotools, ant ...
    Bravo encore .

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    J'ai parcouru le tutoriel, il est tard il faut dire

    J'ai l'ai trouvé clair, précis et progressif.

    Excellent pour se lancer ou se relancer dans le makefile.

    Il n'y a pas une version téléchargeable de ce tuto ?

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Concernant le paragraphe "sous-Makefiles", les makefile recursifs, c'est mal(c), et pour de nombreuses raisons ! http://www.pcug.org.au/~millerp/rmch...cons-harm.html
    Je suis tombe dessus il y a peu, ayant lu un article a ce sujet dans Linux Format (magazine brittish ou ricain, enfin il est vendu en angleterre) et, considerant que tous les arguments donnes semblent evident une fois enonces, c'est a se demander comment on peut encore aujourd'hui utiliser des makefile recursifs... Inertie ?
    Perso, je n'ai qu'une tres petite experience des makefile (et meme des autotools), donc je ne connais pas la "methode miracle", mais je peux renvoyer ici les codes qui etaient donnes dans le mag, si ca interesse quelqu'un...

  5. #5
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    bon, je suis un dev. debutant, ayant essentiellement tourné sous php...

    je veut bien croire que toutes ces syntaxes sont obligatoire, mais mon dieux, ca me degoute!

    ce c/c++ est tellemnt complet(exe?) merci pour ce tuto, indispensable (je pense, meme si je n'y connait rien).

    en tout cas, en l'ayant survolé, il est :
    progressif
    clair
    bien fait quoi!

    donc, voila un avis de debutant te felicitant

    (apres, si c faux, c po moi qui vait te le dire...)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Points : 51
    Points
    51
    Par défaut suggestion pour la mise en oeuvre
    Bonjour,
    J'ai suivi votre tutoriel prévu pour GCC jusqu'au point 9 (variable DEBUG)
    Cette variable disparait au point 10 (mais c'est un détail et l'extrapolation doit être facile)
    Personnellement, j'utilise GCC avec CodeBlock et j'ai appellé le fichier makefile
    makefileGcc
    . Tout le projet est placé dans un répertoire
    tutoMakefile
    Lorsque j'applique la ligne de commande suivante sous windows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\CodeBlock\MinGW\bin\mingw32-make.exe C:\tutoMakefile\makefileGcc
    rien ne se passe
    Pourriez vous expliciter ?
    Cordialement

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par carreau Voir le message
    Lorsque j'applique la ligne de commande suivante sous windows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\CodeBlock\MinGW\bin\mingw32-make.exe C:\tutoMakefile\makefileGcc
    rien ne se passe
    Pourriez vous expliciter ?
    Ici tu demandes à make d'exécuter la règle "C:\tutoMakefile\makefileGcc" du fichier appelé makefile présent dans le répertoire courant.

    Si tu souhaites utiliser un fichier makefile nommé différemment, il faut utiliser l'option -f :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\CodeBlock\MinGW\bin\mingw32-make.exe -f C:\tutoMakefile\makefileGcc

  8. #8
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    je n'aime pas trop le 'rm -rf' surtout le '-rf' dans les cibles clean et mrproper.

    Cela peut être dangereux, si une personne modifie la cible EXEC par exemple, ou bien dans le cas d'un modification accidentelle qui mettrai un espace entre '*' et '.o'

    je verrai plus un rm sans options de la liste des objets.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    je n'aime pas trop le 'rm -rf' surtout le '-rf' dans les cibles clean et mrproper.

    Cela peut être dangereux, si une personne modifie la cible EXEC par exemple, ou bien dans le cas d'un modification accidentelle qui mettrai un espace entre '*' et '.o'

    je verrai plus un rm sans options de la liste des objets.
    Effectivement. D'autant qu'ici ces options sont inutiles.

    EDIT : mise à jour effectuée

  10. #10
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 76
    Points : 49
    Points
    49
    Par défaut
    Bonjour,
    Merci pour ce tuto très bien fait.
    Par contre je n'ai pas trouvé (mal lu?) d'informations concernant les règles présentes par défaut. (il n'y a pas forcément besoin de créer de règle implicite %.o:%.c , car make va automatiquement en proposer une).
    Je ne sais pas notamment comment désactiver celles-ci... (pour voir mon problème plus en détail, c'est ici...)
    Merci

  11. #11
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    Le tuto est très bien fait, très compréhensible !

    Mais, j'aurais aimé avoir des précisions sur les éléments de la ligne CFLAGS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFLAGS=-W -Wall -ansi -pedantic
    Merci

  12. #12
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Si ça intéresse quelqu'un :
    -D : Définie ou redéfinie une macro
    -D-FOO: définie la macro FOO . Elle prend la valeur 1.
    -D-FOO=BAR: définie la macro FOO . Elle prend la valeur BAR
    -W: Définie le niveau d’alerte. Les valeurs les plus courantes sont :
    -Wall: Affiche tout les types d’alerte
    -Werror: Transforme les niveaux d’alertes Warning en erreur
    -pedantic : Affiche un message d’alerte pour une ligne de code ne suivant
    pas le standard C strict.
    -ansi: Affiche un message d’alerte pour toute ligne de code ne suivant pas
    le standard C ansi.
    -std=standard: Affiche un message d’alerte pour toute ligne de code
    ne suivant pas le standard standard . Les valeurs pour standard peuvent être :
    c99, c90, c89, iso9899:1990, gnu90, c++98, gnu++98, etc …
    -I: Spécifie un chemin de recherche additionnel des headers à inclure.
    -nostdinc : Indique que la recherche des headers doit se faire seulement à
    partir des options -I .
    -g: Spécifie l’inclusion des symboles de debuggage.
    -O : Spécifie un niveau d’optimisation (ne pas mixer avec l'option -g).
    Les valeurs vont de :
    -Os : Optimise pour la taille
    -O, O1, O2, O3 : Optimise l'exécution.
    -O0 : Supprime l'optimisation (valeur par défaut).
    Linux Embarqué – IUT Lyon1 – 2011-2012 21/31Les paramètres standards de GCC (suite) :
    -E : Stoppe la compilation après l’étape du pré-proccesseur.
    -S : Stoppe la compilation après l’étape de compilation.
    -c : Stoppe la compilation après l’étape d’assemblage.
    -o name : Spécifie le nom du fichier en sortie.
    -static : Intègre les symboles des librairies dans le fichier exécutable
    final.
    -l : Spécifie le nom d’une librairie utilisée par le code source.
    -L : Spécifie un chemin additionnel de recherche des librairies.
    -shared : Produit une librairie dynamique.
    -Wa,option : Permet de passer les options option à l’assembleur.
    -Wl,option : Permet de passer les options option à l’éditeur de liens.
    -nostdlib : Demande de ne pas utiliser les librairies standard. Il
    faudra fournir le chemin vers les librairies voulues.
    -dynamic-linker=/rep/linker- : Spécifie un nouveau éditeur
    de lien dynamique à inclure dans l'exécutable.
    -rpath : Spécifie le chemin de recherche des bibliothèques
    dynamiques.
    -rpath-link : Quand une bibliothèque en requière une autre,
    spécifie le chemin de recherche de cette bibliothèque dynamique.
    -nostartfiles : Spécifie de ne pas inclure les C-runtimes (crt0.o,
    etc ..) dans l’exécutable. Il sera nécessaire de fournir ses propres fichiers
    c-runtimes.
    -T-file : Spécifie le fichier file comme script pour l’éditeur de
    liens.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Rencontre fortuite
    Bonjour,

    Je suis tombé par hasard sur ce tutoriel, pas mal fait du tout dans son ensemble, cependant, en le parcourant rapidement, je suis tombé sur une énormité.

    Je parlerai là principalement de la variante GNU de make, car je la connais mieux, mais je pense que ce que je vais dire est tenu aussi des les autres variantes.

    La variable CC est effectivement pour le compilateur C, mais la variable CPP n'est absolument pas pour le compilateur C++, mais pour le préprocesseur C. (C PreProcessor), c'est la variable CXX qui sert de variable de compilateur C++.

    La variable CXXFLAGS est bien pour les flags pour le compilateur C++, et est donc en adéquation avec l'utilisation de la variable CXX pour le compilateur.
    Cela reste donc logique pour le moment.

    Et donc l'apparition de la variable CPPFLAGS ne fera donc peur à personne quand à sa signification.

    Un autre point à remarquer, les variables utilisées ont l'air présente par défaut dans make, or ce n'est absolument pas le cas pour toutes,
    - CC
    - CFLAGS
    - CXX
    - CXXFLAGS
    - CPP
    - CPPFLAGS
    - LDFLAGS
    le sont, car ces variables là sont utilisées pour les règles implicites de make, mais une variable comme EXEC, bien qu'utile, n'est pas une variable ayant une valeur prédéfinie dans make. (gmake - variables implicites)

    Et personnellement, je préfère utiliser les règles implicites de make, bien fondée et testée, que de les refaire moi même, même si cette étapes peut sembler nécessaire à certains pour bien comprendre comme cela se passe.

    Une autre remarque, hors propos cette fois, l'utilisation de -ansi me semble obsolète, puisqu'elle force l'utilisation du C de la norme de 89, ce qui est très vieux sachant que depuis sont sorti les normes ISO de 99 et de 2011.
    Il pourrais être judicieux, pour que les programmes tournent plus rapidement encore d'utiliser les extensions de ces nouvelles normes, et donc de spécifier plutôt ces normes là au compilateur. (-std=c11 pour le dernier, toujours en développement, ou -std=99 pour la version de 99)

  14. #14
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Marmand Voir le message
    La variable CC est effectivement pour le compilateur C, mais la variable CPP n'est absolument pas pour le compilateur C++, mais pour le préprocesseur C. (C PreProcessor), c'est la variable CXX qui sert de variable de compilateur C++.

    La variable CXXFLAGS est bien pour les flags pour le compilateur C++, et est donc en adéquation avec l'utilisation de la variable CXX pour le compilateur.
    Cela reste donc logique pour le moment.

    Et donc l'apparition de la variable CPPFLAGS ne fera donc peur à personne quand à sa signification.
    effectivement, je viens de mettre à jour avec la forme plus idiomatique.

    Citation Envoyé par Marmand Voir le message
    Et personnellement, je préfère utiliser les règles implicites de make, bien fondée et testée, que de les refaire moi même, même si cette étapes peut sembler nécessaire à certains pour bien comprendre comme cela se passe.
    Il faudrait peut être que je rajoute un paragraphe sur les règles implicites effectivement.

    Citation Envoyé par Marmand Voir le message
    Une autre remarque, hors propos cette fois, l'utilisation de -ansi me semble obsolète, puisqu'elle force l'utilisation du C de la norme de 89, ce qui est très vieux sachant que depuis sont sorti les normes ISO de 99 et de 2011.
    Il pourrais être judicieux, pour que les programmes tournent plus rapidement encore d'utiliser les extensions de ces nouvelles normes, et donc de spécifier plutôt ces normes là au compilateur. (-std=c11 pour le dernier, toujours en développement, ou -std=99 pour la version de 99)
    Le but de cet article est de présenter le fonctionnement des makefile, gcc n'est qu'un support.

    En outre, à l'heure actuelle, seul C89 est à peu prés correctement supporté par les principaux compilateurs du marché. C99 (et encore plus C11) posent quelques problèmes de portabilité.

  15. #15
    Membre du Club
    Femme Profil pro
    Étudiante
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiante

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 52
    Points
    52
    Par défaut
    wow super tuto j'avais pris d'autres habitudes manuelles mais le makefile "automatique" j'avoue c'est confortable (je parle de celui du chapitre "8. Commandes silencieuses")
    A priori ça marche aussi pour mes petits listings de noob en c++ sous MingW (j'ai juste remplacé le 'gcc' par 'g++' et l'extension en bas '.c' par 'cxx'
    Merci bcp sir GL

  16. #16
    Futur Membre du Club
    Homme Profil pro
    développements Java EE
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : développements Java EE
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Très bon tutoriel (mais je n'ai pas testé le dernier chapitre 10 sur les sous makefiles).

  17. #17
    Membre confirmé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Points : 537
    Points
    537
    Par défaut Déjà dit ?
    Bonjour,
    je débute en C++ (sous Linux) et je viens de l'environnement Php (Windows et Linux).
    Dans une vie antérieure, j'ai fait du Fortran (entre autre) et connais donc la notion de compilation, de link, etc ...
    Pourquoi sur une notion de compilation démarrer un progamme de C++ avec 3 fichiers ?
    Alors que la compréhension des deux fichiers complémentaires au code (me) reste à acquérir ?
    Du coup, je vais me tourner vers d'autres tutoriaux plus "débutants", tant pis.
    Olivier

Discussions similaires

  1. Les meilleurs cours et tutoriels C++
    Par Community Management dans le forum C++
    Réponses: 1
    Dernier message: 13/05/2015, 13h50
  2. [Makefile] Tutoriels
    Par melissouille dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 10/01/2007, 08h51
  3. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  4. Tutoriels et liens pour le Borland Database Engine
    Par Community Management dans le forum Paradox
    Réponses: 0
    Dernier message: 25/03/2002, 10h23
  5. F.A.Q, Doc, cours, tutoriels sur JBuilder
    Par Ricky81 dans le forum JBuilder
    Réponses: 0
    Dernier message: 14/03/2002, 15h28

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