At first sight, I prefer the hooks approach. Not just cos I'm a noob (although that is a compelling reason in itself) but also because it happens during the main compile. A separate innovation could have different flags so it wouldn't be authoritative anymore.
But it absolutely has to follow the preprocessor, so how do I do that? I'm a bit surprised about that being a problem cos when I look at preprocessor output it looks very convenient - I get one big file but it's full of clues as to where it all came from. Perhaps I have to hook those clues. Adrian