Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    gl
    gl est déconnecté
    Rédacteur/Modérateur

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

    Informations forums :
    Inscription : juin 2002
    Messages : 2 095
    Points : 3 954
    Points
    3 954

    Par défaut Tutoriel Makefile

    Voici une petite intoduction à l'écriture de Makefile : Introduction à Makefile.

    Vos remarques, commentaires, suggestions sont les bienvenues.

  2. #2
    Nouveau Membre du Club
    Inscrit en
    novembre 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : novembre 2004
    Messages : 57
    Points : 28
    Points
    28

    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
    Inscrit en
    mars 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 20
    Points : 22
    Points
    22

    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 confirmé
    Inscrit en
    avril 2004
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 289
    Points : 293
    Points
    293

    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 expérimenté Avatar de hansaplast
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 929
    Points : 563
    Points
    563

    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
    Futur Membre du Club
    Inscrit en
    juillet 2003
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 78
    Points : 19
    Points
    19

    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 :
    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/Modérateur

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

    Informations forums :
    Inscription : juin 2002
    Messages : 2 095
    Points : 3 954
    Points
    3 954

    Par défaut

    Citation Envoyé par carreau Voir le message
    Lorsque j'applique la ligne de commande suivante sous windows
    Code :
    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 :
    C:\CodeBlock\MinGW\bin\mingw32-make.exe -f C:\tutoMakefile\makefileGcc

  8. #8
    Expert Confirmé Avatar de jabbounet
    Homme Profil pro frederic frances
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Nom : Homme frederic frances
    Âge : 38

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 905
    Points : 2 681
    Points
    2 681

    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/Modérateur

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

    Informations forums :
    Inscription : juin 2002
    Messages : 2 095
    Points : 3 954
    Points
    3 954

    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
    Futur Membre du Club
    Inscrit en
    mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : mai 2004
    Messages : 74
    Points : 17
    Points
    17

    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
    Etudiant Licence Pro Automatique et Info Industrielle options GTB
    Inscrit en
    mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant Licence Pro Automatique et Info Industrielle options GTB

    Informations forums :
    Inscription : mai 2011
    Messages : 52
    Points : 41
    Points
    41

    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 :
    CFLAGS=-W -Wall -ansi -pedantic
    Merci

  12. #12
    Membre du Club Avatar de royal380
    Homme Profil pro
    Etudiant Licence Pro Automatique et Info Industrielle options GTB
    Inscrit en
    mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant Licence Pro Automatique et Info Industrielle options GTB

    Informations forums :
    Inscription : mai 2011
    Messages : 52
    Points : 41
    Points
    41

    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
    Invité de passage
    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/Modérateur

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

    Informations forums :
    Inscription : juin 2002
    Messages : 2 095
    Points : 3 954
    Points
    3 954

    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
    Nouveau Membre du Club
    Femme Profil pro
    Étudiante
    Inscrit en
    février 2014
    Messages
    27
    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 : 27
    Points : 38
    Points
    38

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •