generalizing makefile