Использование макросов $(Inherit) и $(NoInherit)
Обновлен: Ноябрь 2007
В данном разделе на нескольких примерах рассматривается использование макросов $(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)
Следует с осторожностью использовать макрос $(NoInherit) в свойстве Defines для таких средств, как компилятор или компоновщик C/C++; можно отключить использование значений по умолчанию проекта (например, заданных параметрами Использование ATL и Использование MFC).