5

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>
4

0 に答える 0