use makefile to do project management