Voici une petite intoduction à l'écriture de Makefile : Introduction à Makefile.
Vos remarques, commentaires, suggestions sont les bienvenues.
Voici une petite intoduction à l'écriture de Makefile : Introduction à Makefile.
Vos remarques, commentaires, suggestions sont les bienvenues.
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 .
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 ?
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...
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...)
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. Tout le projet est placé dans un répertoiremakefileGccLorsque j'applique la ligne de commande suivante sous windowstutoMakefile
rien ne se passe
Code : Sélectionner tout - Visualiser dans une fenêtre à part C:\CodeBlock\MinGW\bin\mingw32-make.exe C:\tutoMakefile\makefileGcc
Pourriez vous expliciter ?
Cordialement
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
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.
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
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:
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part CFLAGS=-W -Wall -ansi -pedantic
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.
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)
effectivement, je viens de mettre à jour avec la forme plus idiomatique.
Il faudrait peut être que je rajoute un paragraphe sur les règles implicites effectivement.
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é.
wow super tuto j'avais pris d'autres habitudes manuellesmais 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![]()
Très bon tutoriel (mais je n'ai pas testé le dernier chapitre 10 sur les sous makefiles).
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
Partager