Типы свойств (C++)
В системе проектов свойства подразделяются на два типа: простые и агрегатные. Эти типы свойств оцениваются по-разному при наследовании свойств.
Простые свойства
Простые свойства не являются строковыми, то есть они могут представлять собой целые числа, логические значения и перечисления, и содержат только одно значение. Если они определены на локальном уровне (в данном файле конфигурации, данной конфигурации или на данной странице свойств), унаследованное значение игнорируется. Примером такого свойства является WarnAsError, в котором задается ключ /WX для CL.EXE.
Агрегатные свойства
Агрегатные свойства всегда являются строковыми. Значение агрегатного свойства, определенное на любом уровне, сцепляется со значением его родительского объекта. Примером агрегатного свойства является AdditionalIncludeDirectories, в котором задается ключ /I для CL.EXE. Хорошим примером агрегатных свойств являются свойства путей, поскольку они включают в себя не одно значение, а список нескольких значений.
Существуют три специальных встроенных макроса, управляющих оценкой для агрегатных свойств.
$(Inherit)
Задает оценку значений свойств родительского объекта и вставляет эти значения на место макроса. Если макрос $(Inherit) нигде не указан, он подразумевается в конце значения, то есть значения родительского объекта будут добавлены к значению на текущем уровне.$(NoInherit)
Предписывает не применять значения свойств родительского объекта к агрегатному свойству. Макрос $(NoInherit) переопределяет макрос $(Inherit).$(StopEvaluating)
Предписывает прекратить все оценки для конкретного агрегатного свойства, где обнаружен макрос. Все значения после макроса $(StopEvaluating) теряются.