使用 $(Inherit) 和 $(NoInherit)
更新:2007 年 11 月
這個主題提供了一些有關如何使用 $(Inherit) 和 $(NoInherit) 巨集的範例。
請在專案等級設定下列其他 Include 路徑 (/I):
c:\test
對於特定的檔案,請設定下列其他 Include 路徑:
c:\test2;c:\mystuff
請觀察檔案的 [命令列] 屬性頁。它包括:
/I"c:\test2" /I"c:\mystuff" /I"c:\test"
這是因為如果 $(Inherit) 沒有明確地放在清單中的話,在檔案組態的其他 Include 路徑結尾會有一個隱含 $(Inherit)。
但是,如果您將檔案組態的其他 Include 路徑變更為下列:
c:\test2;$(Inherit);c:\mystuff
它會在檔案的 [命令列] 屬性頁上展開為下列:
/I"c:\test2" /I"c:\test" /I"c:\mystuff"
請注意,專案組態的 Include 路徑也就是放置 $(Inherit) 巨集的地方。$(Inherit) 巨集是用來引導這項屬性之一部分的繼承值的位置。它可以放在清單中的任何位置。
如果您將檔案組態的其他 Include 路徑變更為下列:
$(Inherit);c:\test2;$(Inherit);c:\mystuff
它會在檔案的 [命令列] 屬性頁上展開為下列:
/I"c:\test" /I"c:\test2" /I"c:\test" /I"c:\mystuff"
如果您將檔案組態的其他 Include 路徑變更為下列:
c:\test2;c:\mystuff;$(NoInherit)
它會在檔案的 [命令列] 屬性頁上展開為下列:
/I"c:\test2" /I"c:\mystuff"
請注意專案組態中的 /I"c:\test" 不見了。$(NoInherit) 巨集的位置與如何使用它無關,而 $(Inherit) 則必須區分位置。
$(NoInherit) 的優先等級比 $(Inherit) 來得高。如果 $(NoInherit) 存在的話,$(Inherit) 將會被忽略。例如,將檔案組態的其他 Include 路徑變更為下列:
c:\test2;$(Inherit);c:\mystuff;$(NoInherit)
它展開的情況將會與下列路徑展開後完全相同:
c:\test2;c:\mystuff;$(NoInherit)
對於 C/C++ 編譯器或連結器這類工具,請小心 Defines 屬性中的 $(NoInherit),一不注意就可能會取消專案預設值 (例如由 [ATL 用法] 和 [MFC 用法] 所設定者) 的使用。