使用 $(Inherit) 和 $(NoInherit)
更新:2007 年 11 月
本主题给出一些示例,讲述如何使用 $(Inherit) 和 $(NoInherit) 宏。
在项目级设置下列附加包含路径 (/I):
c:\test
对于特定文件,设置下列附加包含路径:
c:\test2;c:\mystuff
查看文件的“命令行”属性页。它包括:
/I"c:\test2" /I"c:\mystuff" /I"c:\test"
这是因为,如果没有将 $(Inherit) 显式地置于列表中,在文件配置的附加包含路径的末尾就会有一个隐式的 $(Inherit)。
然而,如果将文件配置的附加包含路径更改为:
c:\test2;$(Inherit);c:\mystuff
在文件的“命令行”属性页上,它将扩展到以下内容:
/I"c:\test2" /I"c:\test" /I"c:\mystuff"
请注意,项目配置的附加包含路径是放置 $(Inherit) 宏的位置。$(Inherit) 宏用于指示作为该属性一部分的继承的值的位置。它可以放在该列表的任何位置。
如果将文件配置的附加包含路径做如下更改:
$(Inherit);c:\test2;$(Inherit);c:\mystuff
在文件的“命令行”属性页上,它将扩展到以下内容:
/I"c:\test" /I"c:\test2" /I"c:\test" /I"c:\mystuff"
如果将文件配置的附加包含路径做如下更改:
c:\test2;c:\mystuff;$(NoInherit)
在文件的“命令行”属性页上,它将扩展到以下内容:
/I"c:\test2" /I"c:\mystuff"
请注意,项目配置的 /I"c:\test" 已不存在了。$(NoInherit) 宏的位置与它的使用方法无关,不像 $(Inherit),它与位置有关。
$(NoInherit) 优先于 $(Inherit)。如果存在 $(NoInherit),将忽略 $(Inherit)。例如,如果将文件配置的附加包含路径做如下更改:
c:\test2;$(Inherit);c:\mystuff;$(NoInherit)
这会扩展它,与它是如下包含路径的情况完全相同:
c:\test2;c:\mystuff;$(NoInherit)
在某些工具(如 C/C++ 编译器或链接器)的**“定义”**属性中请慎用 $(NoInherit);可以取消使用项目默认设置(如“ATL 的使用”和“MFC 的使用”设置的值)。