Правильное использование входов и выходов 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>

0 ответов

Другие вопросы по тегам