使用 $(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 的使用”设置的值)。

请参见

其他资源

用于生成命令和属性的宏