For our purposes I don't think it matters too much, I can't imagine many users *not* using the waf build script, and I personally prefer system generated build-time defines to be passed via the command line as opposed to be cached in a file, as long as the defines aren't supposed to be changed by the user. If the user was supposed to be able to change these defines I'd agree that having the defines in a separate config.h file would make more sense.