Smart Makefiles