Problema resuelto. Lo que no hacía en el makefile es añadir todos los ficheros objetos del proyecto cuando llamo al enlazador. Creía erróneamente que como c no se usa en main, no tenía que ponerla ahí. El makefile correcto quedaría como sigue:
all: main clean
main: main.o a.o b.o c.o
@echo Creando ejecutable main
@g++ -o main main.o a.o b.o c.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
De todos modos, muchas gracias a todos