Use the power of make to manage dependencies.
Speeds up compilation and ensures modified
dependencies are always recompiled before executing the test runner.