set defaults in commandline parser and show them to user
It seems more reasonable to set the defaults there because then they can be shown to the user. Otherwise it's difficult for the user to figure out exactly what the program will do without reading the source code.
I checked all callers of the Compiler class and it seems to me they all pass those arguments, so this should be safe. But just in case, I made the parameters mandatory as well so it would fail noisily if they don't (as opposed to passing None around).