- Remove optimization. We don't need it, and -O3 in particular can
introduce bugs.
- Move -I directives to preprocessor flags.
- Add a separate goal for the header file instead of using shell &&.
- Use the special variable $(RM) to remove files, and ignore failures if
some files don't exist.