MSBUILD との互換性を確保しようとしている社内のコンパイラとリンカー ツールがあります (つまり、ビルド/インクリメンタル ビルド/リビルド/クリーン シナリオでの適切な動作)。
最初のステップでは、実際に CL タスクを呼び出してファイルを前処理します。問題は、出力が削除されたかどうか、または入力の1つが変更されたかどうかを検出するように、タスクを適切に設定する方法がわからないことです。
2 番目のステップは、適切なパラメーターを使用してコンパイラーを呼び出すことです。
3 番目のステップは、適切なパラメーターを使用してリンカーを呼び出すことです。
ステップ1が機能すると、ステップ2と3が簡単になると思います。私はステップ1で立ち往生しています。以下のコード例。メイン MFT には、_MFTFiles で指定された他のすべての MFT ファイルを参照する「#includes」が含まれているため、メイン ファイルのみを処理する必要があります。ただし、それらをすべて監視する必要があるため、それらを変更すると、インクリメンタル ビルドが適切に機能します。誰かが何か考えを持っているなら、私はそれを聞きたいです. 私は MSBUILD の本を持っており、もちろんここで精査されていますが、私が達成しようとしていることの例は見当たりません。
前もって感謝します。
<ItemGroup Label="_MainMFT">
<MainMFT Include="MFTSystem.MFT"/>
</ItemGroup>
<ItemGroup Label="_MFTFiles">
<MFTFiles Include="MFTbject.MFT;DebuggerSupport.MFT;enumerations.MFT;collections.MFT;DataStream.MFT;Version.MFT"/>
</ItemGroup>
<Target Name="_PreprocessFiles"
BeforeTargets="Build"
DependsOnTargets=""
Inputs="@(MFTFiles)"
Outputs="@(MFTFiles->'%(Filename).MFTpp')">
<Message Text="PlatformToolsetVersion is $(PlatformToolsetVersion)" Importance="high"/>
<CL Sources="@(MainMFT)" PreprocessorDefinitions="_DEBUG;EL_DIAG_ENABLED" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" PreprocessToFile="true" PreprocessOutputPath="$(ProjectDir)%(Filename).MFTpp" />
<CL Sources="@(MainMFT)" PreprocessorDefinitions="" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" PreprocessToFile="true" PreprocessOutputPath="$(ProjectDir)%(Filename).MFTpp"/>
</Target>
<Target Name="_ObjectCompiler" AfterTargets="_PreprocessFiles;Build">
<Message Text="Calling ObjectCompiler...." Importance="high"/>
</Target>
<Target Name="_ObjectLinker" AfterTargets="_ObjectCompiler;Link">
<Message Text="Calling ObjectLinker...." Importance="high"/>
</Target>