I have several pieces of source which are compiled for a generic 80C31 or a Dallas 80C310. These processors require a different include files for the sfrs. Rather than changing the source code each time I change projects, it would be nice to use an ifdef.
As long as you're changing the project file, you can just change the list of source files. No, that won't help at all. Because .h files are not source files in this sense. They're never compiled by themselves, so they don't have to appear in the project file lists at all. If you want to switch among #included files based on which target is being built, you have to inform the compiler about the target selection in some way that the preprocessor recognizes. That means it can bascially only be a #define, or a change in the include paths. Nothing else can possibly work. The only useful improvement possible in this area is to collect as many of those #ifs as you can in a single, central "portability header", so all other files just have to include that header to resolve the majority of the platform specifics.
"The only useful improvement possible in this area..." Actually there is a really useful improvement that Keil could make here: They could make all the project settings available to the source code via Predefined Macros. Currently, only the Memory Model is available - via __MODEL__ So why not the others; eg, __XTAL__, __DEVICE__, __TARGET__, etc, etc.