Property values are defined for a configuration so you can have different values for a property for different builds. A given configuration can inherit the property values of other configurations. When the project system requires a property value, it checks for the existence of the property value in current configuration and then in the set of inherited configurations. You can specify the set of inherited configurations using the Configurations dialog.
A special configuration named Common is always inherited by a configuration. The Common configuration allows you to set property values that will apply to all configurations you create. You can select the Common configuration using the Configurations combo box of the properties window. If you are modifying a property value of your project, you almost certainly want each configuration to inherit it, so ensure that the Common configuration is selected.
If the property is unique, the build system will use the one defined for the particular configuration. If the property isn't defined for this configuration, the build system uses an arbitrary one from the set of inherited configurations.
If the property is still undefined, the build system uses the value for the Common configuration. If it is still undefined, the build system tries to find the value in the next higher level of the project hierarchy.
solution [Common] — Preprocessor Definitions = CommonSolutionDef
solution [Debug] — Preprocessor Definitions = DebugSolutionDef
solution [Release] — Preprocessor Definitions = ReleaseSolutionDef
project1 - Preprocessor Definitions =
file1 - Preprocessor Definitions =
file2 [Common] — Preprocessor Definitions = CommonFile1Def
file2 [Debug] — Preprocessor Definitions = DebugFile1Def
project2 [Common] — Preprocessor Definitions = ProjectDef
file1 — Preprocessor Definitions =
file2 [Common] - Preprocessor Definitions = File2Def
In the above example, the files will be compiled with these preprocessor definitions when in Debug configuration…
|project1/file2||CommonSolutionDef, DebugSolutionDef,CommonFile1Def, DebugFile1Def|
|project2/file1||CommonSolutionDef, DebugSolutionDef, ProjectDef|
|project2/file2||ComonSolutionDef, DebugSolutionDef, ProjectDef, File2Def|
…and the files will be compiled with these Preprocessor Definitions when in Release configuration:
|project1/file2||CommonSolutionDef, ReleaseSolutionDef, CommonFile1Def|
|project2/file1||CommonSolutionDef, ReleaseSolutionDef, ProjectDef|
|project2/file2||ComonSolutionDef, ReleaseSolutionDef, ProjectDef, File2Def|