The Makefiles are intended to aid you in building your program the same way each time. They also often help with speed. The make program uses dependencies in the Makefile to decide what parts of the program need to be recompiled. It was common before for executable files to be given corrections without recompiling them. Check that the right includes files are used for the functions you are calling.
Unreferenced symbols are the sign of an incomplete link step.
It usually helps to have statements in the code that inform you of what is happening. To avoid drowning in output you might sometimes get them to print out only the first 3 passes in a loop. Checking that variables have passed correctly between modules often helps. Get familiar with your debugging tools.