Build time configuration Every more-than-trivial project needs configuration The target environment may be X or Y The host environment may be A or B And some user choices may apply You need to include or remove some features You need to enable or disable some diagnostics Build-time configuration is the source of countless bugs Some configuration is rarely built Some configuration is never built, actually Un-polished code rusts, and then fails if you run it Some combination is not even allowed Please limit the number of options Better, arrange for all options to be build-tested every time This is why in fsmos I try to build all source files The linker then discards what is not used If your build takes minutes, or hours, please reconsider