add some abstraction to makefile