more versatile makefile