Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1791 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème de Makefile [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de Makefile [Résolu]

n°1568352
ptitchep
Posté le 01-06-2007 à 04:21:29  profilanswer
 

Bonjour
voilà mon Makefile:
 

Code :
  1. CC=g++
  2. CFLAGS= -I/usr/include/GL -I/usr/include/SDL
  3. DEBUG=-g
  4. OPTI=-02
  5. MODE=$(DEBUG)
  6. SDL=-L/usr/X11R6/lib -lX11 -lXext `sdl-config --cflags --libs`
  7. OPENGL=-lGL -lGLU -lglut
  8. EXE=strategie
  9. all: $(EXE)
  10. %.o: %.cpp %.hpp
  11. $(CC) $(CFLAGS) -c -Wall -ansi $(MODE) $<
  12. $(EXE): serveur.o joueur.o carte.o texture.o unite.o objet3d.o uniteMobile.o uniteCarte.o rectangle.o pave.o menu.o arme.o particule.o projectile.o main.o
  13. $(CC) $(CFLAGS) $+ -o $@  -Wall -ansi $(MODE) $(SDL) $(OPENGL)
  14. main.o:constantes.hpp serveur.hpp constantes.hpp
  15. serveur.o: serveur.hpp coord.hpp joueur.hpp constantes.hpp uniteCarte.hpp unite.hpp
  16. ...


 
 
Lorsque je fais make, tout se passe bien au début voici quelques lignes du résultat:
g++ -I/usr/include/GL -I/usr/include/SDL -c -Wall -ansi -g serveur.cpp
g++ -I/usr/include/GL -I/usr/include/SDL -c -Wall -ansi -g joueur.cpp
 
mais à la fin, pour construire main.o, j'ai cette ligne:
g++    -c -o main.o main.cpp
 
je ne sais pas pourquoi, mais d'un coup, il décide que $(CFLAGS) est inutile, ce qui bien sur provoque une cascade d'erreurs de compilation
Pourtant il devrait utiliser la même règle que pour les autres fichiers (d'ailleurs il n'y en a pas d'autres dans mon Makefile).
Et que vient faire ce -o qui se rajoute? d'où vient cette règle?
 
Si qqn comprend, merci de me faire signe


Message édité par ptitchep le 02-06-2007 à 13:22:29

---------------
deluser --remove-home ptitchep
mood
Publicité
Posté le 01-06-2007 à 04:21:29  profilanswer
 

n°1568923
tbp
Posté le 02-06-2007 à 11:22:35  profilanswer
 

La réponse est dans la doc. CC/CFLAGS pour le C, CXX/CXXFLAGS pour le C++.

n°1568932
ptitchep
Posté le 02-06-2007 à 12:12:03  profilanswer
 

une variable n'est pas juste une variable? en quoi le nom de CC ou CXX change quelque chose à l'évaluation de $(CC) ou $(CXX) le makefile n'est pas juste un script? Et pourquoi les problèmes surgissent seulement pour main.o?
 
Effectivement ça fonctionne avec CXXFLAGS mais pourquoi ai-je une règle spéciale pour main.cpp? Dans mon Makefile, il a une règle comme les autres et je veux qu'il la suive! Pourquoi pour construire main.o la ligne serait
 
g++ -I/usr/include/GL -I/usr/include/SDL   -c -o main.o main.cpp
 
et pas
 
g++ -I/usr/include/GL -I/usr/include/SDL -c -Wall -ansi -g main.cpp
 
Est-ce que la solution serait de changer le nom de mon .cpp ou bien est-ce qu'il regarde dans quel fichier est la fonction main()?
J'ai ma réponse :
 
g++ -I/usr/include/GL -I/usr/include/SDL   -c -o debut.o debut.cpp
 
pourquoi? moi je veux mes options -Wall -ansi -g!!!!!!!!!!!!!!!!!!!


Message édité par ptitchep le 02-06-2007 à 12:25:43

---------------
deluser --remove-home ptitchep
n°1568935
tbp
Posté le 02-06-2007 à 12:26:03  profilanswer
 

Certes, mais lorsqu'on s'amuse à pervertir la sémantique des variables intervenant dans les règles innées on a grand intérêt à ne pas faire intervenir les-dites règles.
Et, que je sache, 'g++    -c -o main.o main.cpp' n'est pas le fruit de vos règles.
 
edit: trop la flemme pour répondre aux edit.

Message cité 1 fois
Message édité par tbp le 02-06-2007 à 12:27:51
n°1568936
ptitchep
Posté le 02-06-2007 à 12:29:29  profilanswer
 

tbp a écrit :

C
Et, que je sache, 'g++    -c -o main.o main.cpp' n'est pas le fruit de vos règles.


 
Justement je veux m'en débarasser. Comment?
Et si je n'utilise aucune variable "habituelle"?


---------------
deluser --remove-home ptitchep
n°1568943
tbp
Posté le 02-06-2007 à 12:45:22  profilanswer
 

Dans un makefile, moins on en écrit mieux c'est.
 
La règle

Code :
  1. %.o: %.cpp %.hpp
  2. $(CC) $(CFLAGS) -c -Wall -ansi $(MODE) $<


... ne fait surement pas ce que vous penser qu'elle fait.
 
A ce stade, lire la doc vous ferait certainement gagner du temps http://www.gnu.org/software/make/m [...] Rules.html
 
PS: gcc/g++ peut generer automatiquement les dépendances, genre '-include *.d' dans le makefile et -MMD pour gcc.


Message édité par tbp le 02-06-2007 à 12:45:54
n°1568955
ptitchep
Posté le 02-06-2007 à 13:20:17  profilanswer
 

Effectivement c'est bien cette règle qui posait problème mais elle est pourtant juste.
En réalité je n'avais pas de main.hpp car je n'ai rien à mettre dedans car ma fonction main se contente de créer un Serveur qui lui gère toute l'application.
 
J'ai donc créé un main.hpp qui contient:
 
#ifndef MAIN_HPP
#define MAIN_HPP
 
#endif
 
et du coup la règle est aussi valide que pour les autres .o et tout fonctionne, même avec mes anciennes variables. En fait make appliquait la règle générique puisque main.hpp n'existait pas
 
Merci beaucoup pour le temps passé et la doc qui m'a l'air plus intéressante que "man make"


---------------
deluser --remove-home ptitchep
n°1568977
tbp
Posté le 02-06-2007 à 13:43:37  profilanswer
 

Mais merde, j'ai réussi à faire lire une doc?
 
Virez votre règle '%.o: %.cpp %.hpp', elle ne sert à rien vu vos dépendances explicites. En fait, dans votre cas, vous n'avez besoin que d'une règle de linkage puisque qu'il n'y a pas de relation entre la cible (de linkage) et les objets; ensuite avec les règles implicites qui vont biens, un petit 'CXXFLAGS += -Wp,-MT,$@,-MMD,$(@:.o=.d)' et un '-include *.d' à la fin le tout est emballé en qques lignes.
Il est aussi très simple de fabriquer la liste des sources, et celle dérivée des objets, pour peu que les fichiers soient posés comme il faut avec $(wildcard ...), $(patsubst ...) etc...
 
J'me répète mais le truc c'est d'en écrire le moins possible.

n°1568985
ptitchep
Posté le 02-06-2007 à 14:03:09  profilanswer
 

non je l'ai encore pas lue.
J'ai choisi la solution facile pour que ça fonctionne et la prochaine fois que je bosse sur mon projet je vais m'y atteler et changer mes règles


---------------
deluser --remove-home ptitchep
n°1568987
tbp
Posté le 02-06-2007 à 14:12:44  profilanswer
 

*ouvre la fenêtre*
*saute*

mood
Publicité
Posté le 02-06-2007 à 14:12:44  profilanswer
 

n°1568988
ptitchep
Posté le 02-06-2007 à 14:15:01  profilanswer
 

pk? y'a un problème avec les gens qui ne veulent pas bosser un samedi?
Je ne fais pas non plus partie de la france qui se lève tot.


---------------
deluser --remove-home ptitchep
n°1568992
tbp
Posté le 02-06-2007 à 14:26:27  profilanswer
 

Aha! encore un de ces traitres à la Nation de traine-la-grolle trotskiste! Tu es fait comme un rat, sors sur ton palier, mets les mains contre le mur et attends le prochain panier à salade.

n°1568994
ptitchep
Posté le 02-06-2007 à 14:34:10  profilanswer
 

Je peux fumer un joint et chanter des chansons hippies en les attendant?


---------------
deluser --remove-home ptitchep

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème de Makefile [Résolu]

 

Sujets relatifs
[Résolu] Ajax - [object HTMLTextAreaElement][VBA / ACCESS] Problème liste déroulante avec autre liste déroulante
[JAVASCRIPT] chargement fichier lors de lappel d'une fonctionProblème avec le contenu d'un fichier
[Résolu] Problème avec FirefoxProbleme centrage site sous differentes résolutions
[resolu] Apache et php : Pages qui ne s'affichent pas.Problème débutant
Equation de la chaleur en 2D. Problème avec mon logiciel. 
Plus de sujets relatifs à : Problème de Makefile [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR