我们有一个内部编译器和链接器工具,我们正试图使 MSBUILD 兼容(即在构建/增量构建/重建/清理场景中的正确行为)
在第一步中,我们实际上调用 CL 任务来预处理我们的文件。问题是我似乎无法弄清楚如何正确设置任务来做到这一点,因此它会检测输出是否被删除或输入之一是否被修改。
第二步是使用适当的参数调用我们的编译器。
第三步是使用适当的参数调用我们的链接器。
我认为一旦第一步工作,制作第二步和第三步就会很简单;我被困在第一步。下面的示例代码。主 MFT 包含“#includes”,它引用了在 _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>