makefile generalization