正确使用带有目标的msbuild输入和输出

正确使用带有目标的msbuild输入和输出,msbuild,custom-build-step,Msbuild,Custom Build Step,我们有一个内部编译器和链接器工具,试图使MSBUILD兼容(即,在构建/增量构建/重建/清理场景中的正确行为) 在第一步中,我们实际上调用CL任务来预处理文件。问题是,我似乎不知道如何正确设置任务,以便它检测输出是否被删除或输入是否被修改 第二步是使用适当的参数调用编译器 第三步是使用适当的参数调用链接器 我认为一旦第一步奏效,第二步和第三步就会变得简单;我被困在第一步。下面是示例代码。主MFT包含“#includes”,它引用了#MFT文件中命名的所有其他MFT文件,因此我们只需要处理主文件;

我们有一个内部编译器和链接器工具,试图使MSBUILD兼容(即,在构建/增量构建/重建/清理场景中的正确行为)

在第一步中,我们实际上调用CL任务来预处理文件。问题是,我似乎不知道如何正确设置任务,以便它检测输出是否被删除或输入是否被修改

第二步是使用适当的参数调用编译器

第三步是使用适当的参数调用链接器

我认为一旦第一步奏效,第二步和第三步就会变得简单;我被困在第一步。下面是示例代码。主MFT包含“#includes”,它引用了#MFT文件中命名的所有其他MFT文件,因此我们只需要处理主文件;但是我们需要监控它们,所以如果我们改变它们,增量构建可以正常工作。如果有人知道的话,我很想听。我有一本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>