【自問自答】
InheritsFromParent
先頭に追加することを意味します。これを確認するために、Visual Studio 2008 でユーザー マクロがどのように機能するかを明らかにする実験を行いました。セットアップは次のとおりです。
- プロジェクトには、タグを使用し
p.vcproj
てプロパティ シート ファイル(派生d.vsprops
の 'd' ) が含まれます。InheritedPropertySheets
d.vsprops
プロパティ シート ファイルが含まれます( baseb.vsprops
の場合は 'b' )。
p.vcproj
環境をダンプするビルド前イベントも定義します。
- どちらの
.vsprops
ファイルにも、ユーザー マクロ定義が含まれています。
b.vsprops
...
<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
ビルド出力には表示されません。
- ユーザー マクロは、またはに関係なく、含まれているプロパティ シートから常に継承されます。証明: inは環境に設定されておらず、 inはを必要とせずに使用されています。
PerformEnvironmentSet
InheritsFromParent
b.vsprops
NOENV
d.vsprops
InheritsFromParent
- ユーザー マクロを単純に再定義すると、以前の定義が上書きされます。Proof:
OVERRIDE
は に設定されてD
いますが、以前は として定義されていましたB
。
- を使用してユーザー マクロを再定義すると、新しい定義が以前の定義の
InheritsFromParent="true"
先頭Delimiter
に追加され、指定された. 証明:PREPEND
はD+B
(notD
またはB+D
.)に設定されます。
Visual Studio.vsprops
ファイルと関連トピックの説明のために見つけた追加のリソースを次に示します。これは数年前のものですが、今でも役に立ちます。
VC プロジェクト システムの理解 パート I: ファイルとツール
VC プロジェクト システムの理解 パート II: 構成とプロジェクト プロパティ ページ ダイアログ
VC プロジェクト システムの理解 パート III: マクロ、環境変数、および共有
VC プロジェクト システムの理解パート IV: プロパティとプロパティの継承
VC プロジェクト システムの理解パート V: ビルド、ツール、および依存関係
VC プロジェクト システムの理解 パート VI: カスタム ビルド ステップとビルド イベント
VC プロジェクト システムの理解 パート VII: "makefile" プロジェクトと (再) 環境の使用