¡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