Makefile

(Cliquez-ici pour accéder à la version originale de cette discussion avec couleurs et images)







Posted by: Mathusalem

Bonjour !
Je programme en C++ sous Ubuntu.
J'ai plusieurs fichiers. Pour l'instant, j'ai deux objets :

une classe Vecteur.
une classe Matrices.

J'ai donc : Vecteur.cc, Vecteur.h, Matrices.cc, Matrices.h

J'ai considéré les matrices comme des vector < Vecteur >, c'est à dire un tableau d'elements de la classe Vecteur. Pour ce faire, j'ai dû évidemment inclure Vecteur.h dans Matrices.h, afin de déclarer ma classe.

J'ai donc : Vecteur.h inclu dans Matrices.h et Matrices.h inclu dans Matrices.cc

J'aimerais faire un testVecteur.cc qui me teste si la surcharge d'opérateurs, méthodes etc.. fonctionnent comme il faut.
Tous les fichiers séparement compilent comme il faut, il n'y a pas de soucis. Lorsque parcontre je veux faire "make" dans le terminal, afin de pouvoir exécuter mon testMatrices.cc, j'obtiens un message d'erreur style:

Matrices.cc:(.text+0xc4): undefined reference to `Vecteur::operator[](int const&) const'
etc...

En gros, j'ai l'impression qu'il capte pas où il doit aller pécher certaines informations (par exemple là, il reconnait pas une surcharge d'opérateurs dans le fichier Vecteur.h)

Voici mon makefile:
--------------------------------
all:testMatrices

Vecteur.o: Vecteur.cc Vecteur.h
g++ -c Vecteur.cc -o Vecteur.o
testMatrices: Matrices.o testMatrices.o
g++ Matrices.o testMatrices.o -o testMatrices
Matrices.o: Matrices.cc Matrices.h Vecteur.h
g++ -c Matrices.cc -o Matrices.o
testMatrices.o: testMatrices.cc Matrices.h
g++ -c testMatrices.cc -o testMatrices.o

--------------------------------

Qu'est-ce qui est faux ?
Merci d'avance,
Math

PS: J'ai bien des "Tab" pour les commandes.



Posted by: fatal_error

salut,

peux-tu montrer tes sources?
pour ma part je parie sur un problème de signature (genre d'un coté t'as un int &) et de l'autre un (const int &)...
Mais bon, cqu'une idée.



Posted by: Mathusalem

Citation:
Posté par fatal_error
salut,

peux-tu montrer tes sources?
pour ma part je parie sur un problème de signature (genre d'un coté t'as un int &) et de l'autre un (const int &)...
Mais bon, cqu'une idée.


Je t'ai envoyé les sources en MP.
Mais donc à ton avis, aucun problème dans le makefile ?

A+
Math

EDIT: J'ai remodifié mon Makefile, y avait des dépendances qui manquaient.
----------------
CC = g++
CXX = g++

all: testVecteur testMatrice

Vecteur.o: Vecteur.cc Vecteur.h

testVecteur.o: testVecteur.cc Vecteur.h

testVecteur: testVecteur.o Vecteur.o

Matrice.o: Matrice.cc Matrice.h Vecteur.h

testMatrice.o: testMatrice.cc Matrice.h Vecteur.h

testMatrice: testMatrice.o Matrice.o Vecteur.o
-------------------

Mais il me crache ceci :

make: *** No rule to make target `testMatrices.cc', needed by `testMatrices.o'. stop.

??



Posted by: fatal_error

re,

pour ma part j'ai aucun problème pour compiler.
J'ai juste rajouté un point d'entrée int main(){return 0;} dans un fichier cpp, mais tu prendras bien sur de faire un fichier main.cpp (ou main.cc vu que tu les appeles cc), pis ca compile.

Voila mon Makefile
Code:
ECHO = @echo RM = @rm GCC = @g++ EDL = g++ RMFLAGS = -f CCFLAGS = LDFLAGS = LIBS = OBJS = Vecteur.o Matrices.o EXE = matrices $(EXE): $(OBJS) $(ECHO) Edition des liens $(EDL) $(OBJS) -o $(EXE) $(LIBS) $(ECHO) Executable pret %.o : %.cpp %.h $(ECHO) Compilation de $< $(GCC) $(CCFLAGS) -c $< clean : $(RM) $(RMFLAGS) $(OBJS) $(EXE) core $(ECHO) clean all rbAll : @make clean 1>/dev/null @make 1>/dev/null


et ma sortie console
Code:
:~/junk/mfMatrices$ make Compilation de Matrices.cpp Edition des liens g++ Vecteur.o Matrices.o -o matrices Executable pret




Posted by: Mathusalem

J'avais oublié le "s" de MatriceS, testMatriceS dans le makefile.
Problème réglé, merci pour ton aide.

A+











-