Como usar eventos de build em projetos de MSBuild

Um evento de build é um comando que o MSBuild executa em um estágio específico no processo de build. O evento pré-build ocorre antes do início do build; o evento pré-link ocorre antes do início da etapa de link; e o evento pós-build ocorre após o término do build com êxito. Um evento de build ocorrerá somente se a etapa de build associada ocorrer. Por exemplo, o evento de pré-link não ocorrerá se a etapa de link não for executada.

Cada um dos três eventos de build é representado em um grupo de definição de item por um elemento de comando (<Command>) executado e um elemento de mensagem (<Message>) que é exibido quando o MSBuild executa o evento de build. Cada elemento é opcional e, se você especificar o mesmo elemento várias vezes, a última ocorrência terá precedência.

Um elemento use-in-build opcional (<build-eventUseInBuild>) pode ser especificado em um grupo de propriedades para indicar se o evento de build é executado. O valor do conteúdo de um elemento use-in-build é true ou false. Por padrão, um evento de build é executado, a menos que seu elemento use-in-build correspondente seja definido como false.

A tabela a seguir lista cada elemento XML de evento de build:

Elemento XML Descrição
PreBuildEvent Esse evento é executado antes do início do build.
PreLinkEvent Esse evento é executado antes do início da etapa de link.
PostBuildEvent Esse evento é executado após a conclusão do build.

A tabela a seguir lista cada elemento use-in-build:

Elemento XML Descrição
PreBuildEventUseInBuild Especifica se o evento pré-build deve ser executado.
PreLinkEventUseInBuild Especifica se o evento pré-link deve ser executado.
PostBuildEventUseInBuild Especifica se o evento pós-build deve ser executado.

Exemplo

O exemplo a seguir pode ser adicionado dentro do elemento Project do arquivo myproject.vcxproj criado em Passo a passo: Usar o MSBuild para criar um projeto do C++. Um evento pré-build faz uma cópia do main.cpp; um evento de pré-link faz uma cópia de main.obj; e um evento pós-build faz uma cópia do myproject.exe. Se o projeto for criado usando uma configuração de lançamento, os eventos de build serão executados. Se o projeto for criado usando uma configuração de depuração, os eventos de build não serão executados.

<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>

Confira também

MSBuild na linha de comando – C++
Passo a passo: Usar o MSBuild para criar um projeto do C++