Использование макросов $(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).

См. также

Другие ресурсы

Макросы для команд и свойств построения