正确使用msbuild输入和输出与目标

时间:2016-07-10 17:49:01

标签: msbuild custom-build-step

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

在第一步中,我们实际调用CL任务来预处理我们的文件。问题是我似乎无法弄清楚如何正确设置任务,以便检测输出是否被删除或其中一个输入被修改。

第二步是使用它的正确参数调用我们的编译器。

第三步是使用它的正确参数调用我们的链接器。

我认为一旦第一步奏效,第二步和第三步就会变得简单;我坚持第一步。示例代码如下。主MFT包含" #include"它引用了_MFTFiles中命名的所有其他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>

0 个答案:

没有答案