Using $(Inherit) and $(NoInherit)
This topic gives some examples on how to use the $(Inherit) and $(NoInherit) macros.
Set the following additional include path (/I) at the project level:
c:\test
For a particular file, set the following additional include path:
c:\test2;c:\mystuff
Observe the file's Command Line property page. It includes:
/I"c:\test2" /I"c:\mystuff" /I"c:\test"
This is because there is an implicit $(Inherit) at the end of the file configuration's additional include paths if $(Inherit) is not placed in the list explicitly.
However, if you change the file configuration's additional include path to this:
c:\test2;$(Inherit);c:\mystuff
it will expand to the following on the file's Command Line property page:
/I"c:\test2" /I"c:\test" /I"c:\mystuff"
Notice that the additional include path from the project configuration is where the $(Inherit) macro was placed. The $(Inherit) macro is used to guide the placement of inherited values that are part of this property. It can go anywhere in the list.
If you change the file configuration's additional include path to this:
$(Inherit);c:\test2;$(Inherit);c:\mystuff
it will expand to the following on the file's Command Line property page:
/I"c:\test" /I"c:\test2" /I"c:\test" /I"c:\mystuff"
If you change the file configuration's additional include path to this:
c:\test2;c:\mystuff;$(NoInherit)
it will expand to the following on the file's Command Line property page:
/I"c:\test2" /I"c:\mystuff"
Notice that /I"c:\test" from the project configuration is gone. The location of the $(NoInherit) macro has no bearing on how it is used, unlike $(Inherit), which is location-sensitive.
$(NoInherit) takes precedence over $(Inherit). If $(NoInherit) is present, $(Inherit) will be ignored. For example, changing the file configuration's additional include path to this:
c:\test2;$(Inherit);c:\mystuff;$(NoInherit)
will expand it exactly the same as if it was:
c:\test2;c:\mystuff;$(NoInherit)
Use care with $(NoInherit) in the Defines property for tools like the C/C++ compiler or linker; you can cancel the use of project defaults (such as those set by Use of ATL and Use of MFC).