smarter makefile