I disagree MortenMacFly. I use Xcode on a daily basis and if you change any options that would in effect change the compiler command line generated your entire project is rebuilt. That is how it should be because if you don't you will get all sorts of strange errors and it will probably take you a little while to track them down. So this is all ready done in an a widely used industry IDE so its not out of the question.
You argument about it being the developer responsibility is weak. The IDE exist to remove developer responsibility and make it easier to develop. After all, why use an IDE or dependency system at all. The developer
knows when changes to a file and therefore he just build the ones that depend on it, shouldn't he? Yet CB does because it is error prone and easy to get wrong if you do it by hand.
Your are correct that an ideal implementation would be difficult, so don't use the ideal one. You use a more broad approach. I think a good way to implement this feature would be through another "Annoying Dialog" which would say:
"You have changed the build options of you project. If you compile some files with these options and try to link object files compiled with the previous there is a likelihood of strange linker and program errors. Would you like to do a full rebuild now?".
This would be triggered every time you change a build option to your project. For even better control it should rebuild the entire project if you change a project or compiler option, but only a target if you change a targets options. That would be pretty easy to do.
BTW: Aren't we trying to be better than make?
EDIT: lw2nhl- you can generate dependicies in make to make sure it rebuilds when you change header files. Its not easy but it can be done and can be automated.