我们有一个内部编译器和链接器工具,我们正试图使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>