implement function run_make: run_make takes a target as its first argument. It finds the rule in the rules data structure corresponding to the target, and evaluates it. If target is NULL, then run_make will evaluate the first target in the rules list.

Update each of the dependencies. In other words, recursively evaluate each dependency rule.