Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/07/2008, 11:00
MortalCombat
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 16 años, 6 meses
Puntos: 0
Problema con makefile (creo que no consigo enlazar bien los archivos)

¡Buenas!

Estoy programando una aplicación en C++ y para compilarla fácilmente he hecho un makefile que me ayude. No he tenido ningún problema hasta que me ha sido necesario declarar una clase que deseo usar en otra, y soy incapaz de conseguir arreglar el makefile para que enlace bien los archivos.

Como creo que no me explico suficientemente bien, voy a pegar aquí el makefile que he hecho y cómo son las dependencias de archivos.

En total tengo 3 clases y el correspondiente archivo principal que contiene el main. Para ello tengo los correspondientes archivos:
* a.h y a.cpp -> Archivo de cabecera de la primera clase y archivo fuente donde se implementa esta clase
* b.h y b.cpp -> Igual que los anteriores, pero para otra clase
* c.h y c.cpp -> Igual que los anteriores, pero para otra clase
* main.cpp -> Archivo que contiene el main y del que obtengo el ejecutable

Las dependencias de estas clases son:
main -> a y b
b -> c

En principio parece sencillo, pero por más que miro mi makefile, no consigo hacer que el código se enlace correctamente. He comprobado que los #includes "a/b/c.h" están donde tienen que estar (en los ficheros que los necesitan) y además están detrás de los #include<libreríac++>. El problema en concreto es que cuando referencio a la clase c dentro de funciones de la clase b me sale "undefined reference to <constructor clase c>" y "undefined reference to <destructor clase c>".

Aquí dejo mi makefile:

all: main clean

main: main.o a.o b.o
@echo Creando ejecutable main
@g++ -o main main.o a.o b.o -O3

main.o: main.cpp
@g++ -c -o main.o main.cpp -O3

a.o: a.cpp
@echo Creando objeto a
@g++ -c -o a.o a.cpp -O3

b.o: b.cpp c.o
@echo Creando objeto b
@g++ -c -o b.o c.o b.cpp -O3

c.o: c.cpp
@echo Creando objeto c
@g++ -c -o c.o c.cpp -O3

clean:
@echo Borrando ficheros objeto
@rm *.o

Estoy trabajando en linux, directamente con un editor de textos y con la consola.

Muchas gracias por vuestra ayuda