Практическое руководство. Использование событий построения в проектах MSBuild

Событие сборки — это команда, которую MSBuild выполняет на определенном этапе процесса сборки. Событие перед сборкой возникает перед запуском сборки; событие перед компоновкой возникает перед запуском этапа компоновки; и событие после сборки возникает после успешного завершения сборки. Событие сборки возникает только в том случае, если выполняется соответствующий этап сборки. Например, событие перед компоновкой не возникает, если этап компоновки не запускается.

Каждое из этих трех событий сборки представлено в группе определений элементов элементом команды (<Command>), которая выполняется, и элементом сообщения (<Message>), которое отображается, когда MSBuild выполняет событие сборки. Эти элементы являются необязательными, и, если один и тот же элемент задан несколько раз, приоритет имеет тот, который указан последним.

В группе свойств можно задать необязательный элемент UseInBuild (<событие_сборкиUseInBuild>), чтобы указать, выполняется ли событие сборки. Содержимое элемента use-in-build имеет значение true или false. По умолчанию событие сборки выполняется, если соответствующий ему элемент use-in-build не имеет значение false.

В следующей таблице перечислены все XML-элементы события сборки.

XML-элемент Description
PreBuildEvent Это событие выполняется перед началом сборки.
PreLinkEvent Это событие выполняется перед началом этапа компоновки.
PostBuildEvent Это событие выполняется после завершения сборки.

В следующей таблице перечислены все элементы UseInBuild.

XML-элемент Description
PreBuildEventUseInBuild Указывает, следует ли выполнять событие перед сборкой.
PreLinkEventUseInBuild Указывает, следует ли выполнять событие перед компоновкой.
PostBuildEventUseInBuild Указывает, следует ли выполнять событие после сборки.

Пример

Следующий пример можно добавить в элемент Project файла myproject.vcxproj, созданного в пошаговом руководстве. Использование MSBuild для создания проекта C++ . Событие перед сборкой создает копию файла main.cpp; событие перед компоновкой создает копию файла main.obj; событие после сборки создает копию файла myproject.exe. Если при сборке проекта используется конфигурация выпуска, события сборки выполняются. Если при сборке проекта используется конфигурация отладки, события сборки не выполняются.

<ItemDefinitionGroup>
  <PreBuildEvent>
    <Command>copy $(ProjectDir)main.cpp $(ProjectDir)copyOfMain.cpp</Command>
    <Message>Making a copy of main.cpp </Message>
  </PreBuildEvent>
  <PreLinkEvent>
    <Command>copy $(ProjectDir)$(Configuration)\main.obj $(ProjectDir)$(Configuration)\copyOfMain.obj</Command>
    <Message>Making a copy of main.obj</Message>
  </PreLinkEvent>
  <PostBuildEvent>
    <Command>copy $(ProjectDir)$(Configuration)\$(TargetFileName) $(ProjectDir)$(Configuration)\copyOfMyproject.exe</Command>
    <Message>Making a copy of myproject.exe</Message>
  </PostBuildEvent>
</ItemDefinitionGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
  <PreBuildEventUseInBuild>true</PreBuildEventUseInBuild>
  <PreLinkEventUseInBuild>true</PreLinkEventUseInBuild>
  <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
  <PreBuildEventUseInBuild>false</PreBuildEventUseInBuild>
  <PreLinkEventUseInBuild>false</PreLinkEventUseInBuild>
  <PostBuildEventUseInBuild>false</PostBuildEventUseInBuild>
</PropertyGroup>

См. также

MSBuild в командной строке — C++
Пошаговое руководство. Создание проекта C++ с помощью MSBuild