正确使用带有目标的msbuild输入和输出
我们有一个内部编译器和链接器工具,试图使MSBUILD兼容(即,在构建/增量构建/重建/清理场景中的正确行为) 在第一步中,我们实际上调用CL任务来预处理文件。问题是,我似乎不知道如何正确设置任务,以便它检测输出是否被删除或输入是否被修改 第二步是使用适当的参数调用编译器 第三步是使用适当的参数调用链接器 我认为一旦第一步奏效,第二步和第三步就会变得简单;我被困在第一步。下面是示例代码。主MFT包含“#includes”,它引用了#MFT文件中命名的所有其他MFT文件,因此我们只需要处理主文件;但是我们需要监控它们,所以如果我们改变它们,增量构建可以正常工作。如果有人知道的话,我很想听。我有一本MSBUILD的书,当然这里也有详细的介绍,但是我没有看到一个我想要实现的例子 提前谢谢正确使用带有目标的msbuild输入和输出,msbuild,custom-build-step,Msbuild,Custom Build Step,我们有一个内部编译器和链接器工具,试图使MSBUILD兼容(即,在构建/增量构建/重建/清理场景中的正确行为) 在第一步中,我们实际上调用CL任务来预处理文件。问题是,我似乎不知道如何正确设置任务,以便它检测输出是否被删除或输入是否被修改 第二步是使用适当的参数调用编译器 第三步是使用适当的参数调用链接器 我认为一旦第一步奏效,第二步和第三步就会变得简单;我被困在第一步。下面是示例代码。主MFT包含“#includes”,它引用了#MFT文件中命名的所有其他MFT文件,因此我们只需要处理主文件;
<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>