It sounds like trying to extend the "Explicitely add current compiling..." and "Explicitely add project's top-level..." options (which I've never had to use).
Exactly. I don't think that having too many automatic "smart" things is smart at all. Computers just aren't smart. Look at all these smart MS programs. They're so darn smart that you can't work with them.
The computer should do exactly what you tell it to do, not any random stuff or anything that you don't know about or have no control over. That is not good behaviour.
I would agree on having something like this as an option (it could even be encapsulated in a plugin, so people who want it can load it and people who dislike the idea aren't stuck with it). For example, it could allow you to select a menu and then could open a dialog having a checklist with all known directories that are not yet in the includes list. Thus, after adding all the directories, you could select the ones that you want as include paths, and hit OK.
However, you should explicitely have to ask for it, such a thing should never happen secretly behind the scenes.
And still, it is not that easy. You still have to specify which targets need which subset of includes, and you should be able to specify their order, too.
A good real life example for why this is important can be found inside the very Code::Blocks sources:
Code::Blocks uses the wxAUI docking library. This library consists of two files,
manager.h and
manager.cpp. As it happens, the Code::Blocks SDK has two files with the exact same name.
Now, what if you just blindly add all subdirectories in arbitrary order? You have a 50% chance of including the wrong file in either target.
This is really bad, including the correct file has to be deterministic, not stochastic.