Coming back to the topic, I expected the Don to have a word about it. Don?
Hm, I didn't really understand what the problem is. Can you be more specific?
OK, let me try
The current implementation allows you to specify a set of defines, include directories and compilation flags in general per target. That way you may have Debug-ANSI, Release-ANSI, Debug-UNICODE, Release-UNICODE, for example. So far, so good. Now let's take OpenCascade as an example. It's a huge "library" composed of many LIB/DLL files (or .so in Linux). Each LIB/DLL or .so (I'll just continue calling it DLL to imply them all) is composed of a bunch of files that belong to different categories (or packages). Depending on the category they belong to, they are placed in their own directory, requiring some includes to be specific to the category you are compiling. They also require some defines to be... well... defined. The point is: there's is no target per category, but a target per x number of categories. It means that you may have a DLL created from 5 different categories, each one with their own set of include directories and defines. In the Visual Studio project files they solve it by defining custom compilation options per file. It's a bit overkill, and may also be considered bad design, but it's the way they did it.
Actually, it extends an idea I proposed a long time ago, which was to be able to define compiler options that could be used, for example, when compiling a single file, without touching the global ones. It would be like defining build options
that you can use globally, per target in a project, for current file compilation and even for a single file in a project. Delphi 2009 has something like that, where you can define build options, save them, load them and attach them to build targets.
Is it a bit clearer now?