[Отвечая на мой вопрос]
InheritsFromParent
означает предварение. Чтобы убедиться в этом, я провел эксперимент, который показывает, как работают пользовательские макросы в Visual Studio 2008. Вот настройка:
- Проект
p.vcproj
содержит файл листа свойств d.vsprops
('d' для производное ) с использованием тега InheritedPropertySheets
.
d.vsprops
включает файл листа свойств b.vsprops
('b' для base .)
p.vcproj
также определяет событие Pre-Build, которое сбрасывает среду.
- Оба
.vsprops
файла содержат определения макросов пользователя.
b.vsprops * ** 1030 1031 *
...
<UserMacro Name="NOENV" Value="B"/>
<UserMacro Name="OVERRIDE" Value="B" PerformEnvironmentSet="true"/>
<UserMacro Name="PREPEND" Value="B" PerformEnvironmentSet="true"/>
...
d.vsprops
...
<VisualStudioPropertySheet ... InheritedPropertySheets=".\b.vsprops">
<UserMacro Name="ENV" Value="$(NOENV)" PerformEnvironmentSet="true"/>
<UserMacro Name="OVERRIDE" Value="D" PerformEnvironmentSet="true"/>
<UserMacro Name="PREPEND" Value="D" InheritsFromParent="true"
Delimiter="+" PerformEnvironmentSet="true"/>
...
p.vcproj
...
<Configuration ... InheritedPropertySheets=".\d.vsprops">
<Tool Name="VCPreBuildEventTool" CommandLine="set | sort"/>
...
сборка вывода
...
ENV=B
OVERRIDE=D
PREPEND=D+B
...
Из этих результатов можно сделать следующие выводы:
PerformEnvironmentSet="true"
необходимо для определения пользовательских макросов в среде, используемой для событий сборки. Доказательство: NOENV
не отображается в выводе сборки.
- Макросы пользователя всегда наследуются от включенных листов свойств независимо от
PerformEnvironmentSet
или InheritsFromParent
. Доказательство: в b.vsprops
, NOENV
не задано в среде, а в d.vsprops
оно используется без необходимости InheritsFromParent
.
- Простое переопределение пользовательского макроса переопределяет любое предыдущее определение. Доказательство:
OVERRIDE
установлено на D
, хотя ранее оно было определено как B
.
- Переопределение пользовательского макроса с помощью
InheritsFromParent="true"
добавляет новое определение к любому предыдущему определению, разделенному указанным Delimiter
. Доказательство: PREPEND
установлено на D+B
(не D
или B+D
.)
Вот некоторые дополнительные ресурсы, которые я нашел для объяснения файлов Visual Studio .vsprops
и связанных с ними тем, это несколько лет назад, но все еще полезно:
понимание части I системы проекта VC: файлы и инструменты
понимание системы II проекта VC: диалог настроек и страниц свойств проекта
понимание системы III проекта VC: макросы, переменные среды и совместное использование
понимание системы IV проекта VC: свойства и наследование свойств
понимание части V системы проекта VC: создание, инструменты и зависимости
понимание части VI системы проекта VC: пользовательские этапы сборки и события сборки
понимание части VII системы проектов VC: проекты "makefile" и (пере) использование сред