「VC PlusPlus:MSBuild アイテムグループ変数」の版間の差分
(→概要) |
|||
84行目: | 84行目: | ||
WithMetadataValueという項目関数を使うと第1引数で指定したタグ値と第2引数で指定した保持値(Include値) | WithMetadataValueという項目関数を使うと第1引数で指定したタグ値と第2引数で指定した保持値(Include値)が指定したものと一致したものに絞るということができます。この記事ではアイテムグループ内で項目関数が使えるという紹介に留めます。[[VC PlusPlus:MSBuild#MSBuildでの項目関数|項目関数]]については専用の記事で説明したいと思います。 | ||
[[VC PlusPlus:MSBuild#関連記事|VC PlusPlus:MSBuild]]に戻る。 | [[VC PlusPlus:MSBuild#関連記事|VC PlusPlus:MSBuild]]に戻る。 |
2024年2月18日 (日) 03:24時点における最新版
概要
アイテムグループ変数は@(ItemGroup)のような形式でアットマークを使って表記する変数です。
アイテムグループの基礎
タグごとにアイテムグループという概念が存在します。以下のようにTextというアイテムが定義されていたとします。そうするとタグ名Textというアイテムグループが存在することになり、@(Text)で、その内容が出力できます。
<Project ...>
<ItemGroup>
<Text Include="doc\a.en.txt" />
<Text Include="doc\a.ja.txt" />
<Text Include="doc\a_hpnonstop.en.txt" />
<Text Include="doc\a_hpnonstop.ja.txt" />
<Text Include="doc\a.en.txt" />
<Text Include="doc\a.ja.txt" />
</ItemGroup>
<Target Name="MessageText" AfterTargets="Build">
<Message Text="@ (Text) =@(Text)" />
</Target>
</Project>
出力結果
@ (Text) = doc\a.en.txt;doc\a.ja.txt;doc\a_hpnonstop.en.txt;doc\a_hpnonstop.ja.txt;doc\a.en.txt;doc\a.ja.txt
このようにバッチのように複数行にはなりませんが、セミコロンでひとまとめにされたものとして、表示できます。@(text)は@(text->'%(Identity)')のように呼び出したの同じ出力になっています。
アイテムグループの中の要素
アイテムグループの中にバッチがあったときは、@(text->'%(Identity)')のように指定できると書きました。ここに固定の文字列を追加することもできます。例えば
<Project ...>
<ItemGroup>
<Text Include="doc\a.en.txt" />
<Text Include="doc\a.ja.txt" />
</ItemGroup>
<Target Name="MessageText" AfterTargets="Build">
<Message Text="@ (Text) = {@(Text->'Include = %(Identity)')}" />
</Target>
</Project>
出力結果
@ (Text) = {Include = doc\a.en.txt;Include = doc\a.ja.txt}
と、このように固定の文字を入れ込むと、バッチの含まれる個数分、繰り返し固定の文字が表示されます。
アイテムグループの中の処理
アイテムグループの中で特定の処理を記述することもできます。つまりアイテムグループの中に記述できる特別なキーワードが存在するということです。かなり多くの処理ができるようになっています。項目関数と呼んでいます。こんなものがあります。
<Project ...>
<ItemGroup>
<Text Include="doc\a.en.txt">
<LinkCompiled>True</LinkCompiled>
</Text>
<Text Include="doc\a.ja.txt">
<LinkCompiled>False</LinkCompiled>
</Text>
</ItemGroup>
<Target Name="MessageText" AfterTargets="Build">
<Message Text="@ (Text) = {@(Text->WithMetadataValue('LinkCompiled', 'true'))}" />
</Target>
</Project>
出力結果
@ (Text) = {doc\a.en.txt}
WithMetadataValueという項目関数を使うと第1引数で指定したタグ値と第2引数で指定した保持値(Include値)が指定したものと一致したものに絞るということができます。この記事ではアイテムグループ内で項目関数が使えるという紹介に留めます。項目関数については専用の記事で説明したいと思います。