Précédent   Forum du club des développeurs et IT Pro > C et C++ > Outils pour C & C++
Outils pour C & C++ Forum d'entraide sur les outils de développement pour C & C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/05/2004, 20h06   #1
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 034
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 034
Points : 3 831
Points : 3 831
Par défaut Tutoriel Makefile

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

Vos remarques, commentaires, suggestions sont les bienvenues.
gl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2004, 10h34   #2
malves
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 57
Points : 28
Points : 28
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 .
malves est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2005, 00h12   #3
filtrac
Membre à l'essai
 
Inscription : mars 2005
Messages : 20
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 20
Points : 22
Points : 22
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 ?
filtrac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 18h09   #4
alveric
Membre confirmé
 
Inscription : avril 2004
Messages : 289
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 289
Points : 283
Points : 283
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...
alveric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2005, 11h56   #5
hansaplast
Membre chevronné
 
Avatar de hansaplast
 
Homme
Inscription : septembre 2005
Messages : 926
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Isère (Rhône Alpes)

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

Informations forums :
Inscription : septembre 2005
Messages : 926
Points : 605
Points : 605
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...)
hansaplast est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2010, 13h11   #6
carreau
Futur Membre du Club
 
Inscription : juillet 2003
Messages : 71
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 71
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
Citation:
makefileGcc
. Tout le projet est placé dans un répertoire
Citation:
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
carreau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2010, 21h54   #7
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 034
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 034
Points : 3 831
Points : 3 831
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
gl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2010, 22h05   #8
jabbounet
Expert Confirmé
 
Avatar de jabbounet
 
Homme frederic frances
Consultant informatique
Inscription : juin 2009
Messages : 1 848
Détails du profil
Informations personnelles :
Nom : Homme frederic frances
Âge : 37

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2009
Messages : 1 848
Points : 2 675
Points : 2 675
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
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2010, 21h15   #9
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 034
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 034
Points : 3 831
Points : 3 831
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
gl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2010, 15h19   #10
hector2
Candidat au titre de Membre du Club
 
Inscription : mai 2004
Messages : 71
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 71
Points : 14
Points : 14
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
hector2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2012, 23h46   #11
royal380
Membre du Club
 
Avatar de royal380
 
Homme
Etudiant Licence Pro Automatique et Info Industrielle options GTB
Inscription : mai 2011
Messages : 44
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 : 44
Points : 45
Points : 45
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
royal380 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2012, 19h36   #12
royal380
Membre du Club
 
Avatar de royal380
 
Homme
Etudiant Licence Pro Automatique et Info Industrielle options GTB
Inscription : mai 2011
Messages : 44
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 : 44
Points : 45
Points : 45
Si ça intéresse quelqu'un :
Citation:
-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.
royal380 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2012, 12h44   #13
Marmand
Invité de passage
 
Homme
Étudiant
Inscription : 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)
Marmand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2012, 20h41   #14
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 034
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 034
Points : 3 831
Points : 3 831
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é.
gl est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h29.


 
 
 
 
Partenaires

Hébergement Web