Manual preprocessor The most simple approach Very easy to apply and maintain Doesn't "scale" well to lots of configuration options Confusing for non-technical users Has its uses: Small projects with only one or two options Technical or infrequently used options (e.g. debugging code)