explain makefile tasks and dependencies