Правильное использование входов и выходов msbuild с целями
У нас есть собственный инструмент компилятора и компоновщика, который мы пытаемся сделать совместимым с MSBUILD (то есть правильное поведение в сценариях сборки / инкрементных сборок / перестройки / очистки)
На первом этапе мы на самом деле вызываем задачу CL для предварительной обработки наших файлов. Проблема в том, что я не могу понять, как правильно настроить задачи, чтобы сделать это, чтобы он обнаружил, удален ли вывод или был ли изменен один из входов.
Второй шаг - вызвать наш компилятор с правильными параметрами.
Третий шаг - вызвать наш компоновщик с правильными параметрами.
Я думаю, что однажды первый шаг работает, второй и третий шаги будут простыми; Я застрял на первом этапе. Пример кода ниже. Основной MFT содержит "#includes", которые ссылаются на все другие файлы MFT, названные в _MFTFiles - поэтому нам нужно только обработать основной файл; но мы должны контролировать их все, поэтому, если мы изменим их, инкрементные сборки будут работать правильно. Если у кого-то есть идея, я бы хотел это услышать. У меня есть книга 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>