[C++] Aide à la création d'un makefile

Aide à la création d'un makefile [C++] - C++ - Programmation

Marsh Posté le 05-01-2007 à 15:15:16    

Bonjour, j'ai besoin de créer un makefile pour un projet que je suis entrain de réaliser, cependant je ne comprend pas tout .
 
 
voila comment sont structurer mes fichiers qui sont au nombre de 4 :
dans le fichier "B_naval.cpp" j'ai inclus :
 
#include "jeux.cpp"
 
ensuite dans le fichier "jeux.cpp" j'ai inclus :
 
#include "flotte.cpp"
 
ensuite dans le fichier "flotte.cpp" j'ai inclus :
 
#include "Biblihoteque.h"
 
et voila donc la structure de mes fichiers :
 
maintenant j'aimerai pouvoir créer le makefile à partir de cela !
 
Merci d'avance pour vos réponses  ;)

Reply

Marsh Posté le 05-01-2007 à 15:15:16   

Reply

Marsh Posté le 05-01-2007 à 15:25:24    

commence par écrire les premières lignes de ton Makefile, pour apprendre. On t'aidera plus si tu essaies par toi même, si tu vois les difficultés et si tu nous poses des questions spécifiques.
 
Par exemple, commence par écrire la ligne qui te permet de compiler un .c en .o, et celle qui permet de faire l'édition de liens pour générer l'exécutable final.


---------------
TriScale innov
Reply

Marsh Posté le 05-01-2007 à 15:26:37    

komper a écrit :


#include "jeux.cpp"


 
eeeuuuhhhhhh ...............
 
tu as une vraie raison de faire ça ?

Reply

Marsh Posté le 05-01-2007 à 15:37:56    

voila ce que j'ai fait, j'ai modifié mes en-entêtes en remplaçant les .cpp par des .out
 
et j'ai essayer de créer le makefile suivant :
 

Code :
  1. B_naval.exe: B_naval.cpp
  2. g++ -o   B_naval.cpp
  3. jeux.out: jeux.cpp
  4. g++ -o  jeux.cpp
  5. flotte.out: flotte.cpp Biblihoteque.h
  6. g++ -o flotte.cpp


 
et voila l'erreur que me renvoi le compilateur:
 

Code :
  1. g++ -o   B_naval.cpp
  2. g++: no input files
  3. make: *** [B_naval.exe] Erreur 1


Reply

Marsh Posté le 05-01-2007 à 16:08:06    

OK, c'est déjà un début...

 

avec g++, l'option -o sert à préciser le nom du fichier de sortie. Il faut donc préciser quelque chose derrière. Exemple:

g++ -o B_naval.exe B_naval.cpp

 

pour générer des fichiers objets, tu n'es pas obligé de préciser de fichier de sortie : g++ utilise construit un nom par défaut en remplaçant l'extension .c/.cpp par .o. Par contre, il faut préciser l'option -c pour ne demander que la compilation et pas l'édition de liens.

 

du coup, l'écriture correcte de ton bout de Makefile serait :

B_naval: B_naval.cpp
    g++ -o B_naval B_naval.cpp

 

jeux.o: jeux.cpp
    g++ -c jeux.cpp

 

flotte.o: flotte.cpp Bibliotheque.h
    g++ -c flotte.cpp

 

Mais reprends la structure de ton projet, car il doit y avoir un problème. Comme l'a souligné kadreg, on ne #include en général pas de fichiers .cpp (il faut de bonnes raisons pour le faire, et vu que tu as l'air d'être débutant, tu n'en as probablement pas)

 

En particulier, pose toi les questions suivantes :
Quel est le fichier qui contient la fonction main() ? de quels headers dépend-il ?
Quels sont les autres fichiers sources ? de quels headers dépendent ils ?


Message édité par franceso le 06-01-2007 à 14:19:58

---------------
TriScale innov
Reply

Marsh Posté le 05-01-2007 à 18:46:28    

komper a écrit :


#include "jeux.cpp"
...
#include "flotte.cpp"


Force 8 sur l'echelle de Goret ...

Reply

Marsh Posté le 25-01-2007 à 17:01:01    

En fait, je crois que tu essaies de passer par analogie de la compilation d'un fichier
comme on a pu te l'enseigner dans tes cours, à la compilation d'un projet de plusieurs  
classes :  
 
Commence par écrire un fichier .h par classe, et inclue le dans chacun des .cpp correspondants
ou tu implémente les méthodes correspondantes.  
Ensuite inclue le fichier .h dans celui de la classe "de plus haut niveau", et ainsi jusqu'à ton main.
 
Non, parce que là, sans headers, tu cours au désastre.
 

Reply

Marsh Posté le 25-01-2007 à 17:33:29    

Au passage, y'a des règles implicites dans make, faut s'en servir ça marche très bien :o
 

Spoiler :


for f in `find . -name '*.cpp'`;do  g++ -MM $f -MF Makefile ;done [:cupra]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed