問題
- VisualStudio2010プロジェクトに多数のカスタムファイルがあります。
- それらが変更されたときに、それらのカスタムファイルに対してツールを実行する必要があります。
- このツールは、既存の.cppファイルに含まれる.hファイルを生成します。
- ビルドプロセスの一部としてツールを実行したいと思います。
- Visual Studio内から実行する必要がありますが、理想的にはmsbuildプロセスの一部として実行することもできます。
既存の標準以下のソリューション
各ファイルで、ファイルを追加するたびに、ファイル設定に移動し、アイテムタイプをカスタムビルドツールに設定してから、[カスタムビルドツール]ダイアログで、コマンドラインパラメーターを設定し、(ハードコードされた)出力を設定し、 (ハードコードされた)追加の依存関係を設定します。
明らかに、これは、カスタムタイプの新しいファイルを追加するたびに、取るに足らない、エラーが発生しやすい量の作業であるため、不十分なソリューションです。
望ましい解決策
Visual Studioをセットアップして、拡張子.fooのファイルが何であれ、.fooファイルが変更されると、CPPコードをコンパイルする前にツールバー.exeを実行します。
私が試みたこと
これに基づいて:http://msdn.microsoft.com/en-us/library/3e889s84 (v = vs.100).aspx.targetsおよび.xmlファイルを設定しようとしました。ただし、Visual Studioに表示されるように新しいアイテムタイプを作成する方法や、.fooタイプのすべてのファイルに魔法のように適用する方法を見つけることはできません。その上、bar.exeツールを呼び出す動作を説明するものにそのいずれかがどのようにリンクしているかがわかりません。
既存のアイテムタイプを追跡し、それらが実際のビルドアクションにどのように変換されるかを判断するために、VisualStudioのすべてのxml/targetsファイルを検索しようとしました。それは常にItemTypeの壁で終わります。そこでは、ProjectItemsSchemaで説明されている束がありますが、それらがどこに実装されているか、または自分でどのように実装するかがわかりません。
MSDNのドキュメントは完全に失敗しており、関連する可能性のあるすべてのページを10回読んだことがありますが、役に立ちませんでした。
Visual Studio 2008では、次のような.rulesファイルを使用してこの種の作業を行いました。
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="Foo Build Rules"
Version="8.00"
>
<Rules>
<CustomBuildRule
Name="FooBuild"
DisplayName="FooGen"
CommandLine="..\..\tools\FooGen.exe [inputs]"
Outputs="$(InputName).h"
AdditionalDependencies="*.foo"
FileExtensions="*.foo"
ExecutionDescription="Generating Foos..."
>
<Properties>
</Properties>
</CustomBuildRule>
</Rules>
</VisualStudioToolFile>
しかし、この機能は2010年に廃止され、新しいシステムで複製する方法を理解できませんでした。
ヘルプ?