共用方式為


如何:在 MSBuild 專案中使用建置事件

建置事件就是 MSBuild 在建置流程中的特定階段執行的命令。 建置前 (Pre-Build) 事件發生於建置開始前; 連結前 事件發生於結步驟開始之前;而在 建置後 事件發生於建置成功結束之後。 只有在相關聯的建置步驟發生時,會發生建置事件。 例如,若未執行連結步驟,則不會發生連結前事件。

在項目定義群組中,這三個建置事件都會以當 MSBuild 執行建置事件時所執行的命令項目 (<Command>) 和所顯示的訊息項目 (<Message>) 來表示。 每一個項目都是選擇性項目,若您多次指定相同的項目,則最後一次優先。

可以在屬性群組中指定選擇性「在建置中使用」(Use-In-Build) 項目 (<build-eventUseInBuild>),表示是否已執行建置事件。 「在建置中使用」(Use-In-Build) 項目的內容值不是 true 就是 false。 根據預設,除非建置事件的對應「在建置中使用」(Use-In-Build) 項目已設為 false,否則會執行建置事件。

下表列出每一個建置事件 XML 項目:

XML 項目

說明

PreBuildEvent

這個事件會在建置開始之前執行。

PreLinkEvent

這個事件會在連結步驟開始之前執行。

PostBuildEvent

這個事件會在建置完成之後執行。

下表列出每一個「在建置中使用」(Use-In-Build) 項目:

XML 項目

說明

PreBuildEventUseInBuild

指定是否要執行「建置前」(Pre-Build) 事件。

PreLinkEventUseInBuild

指定是否要執行「連結前」(Pre-Link) 事件。

PostBuildEventUseInBuild

指定是否要執行「建置後」(Post-Build) 事件。

範例

下列範例可以加入至在逐步解說:使用 MSBuild 來建立 Visual C++ 專案中建立之 myproject.vcxproj 檔的 Project 項目內部。 「建置前」(Pre-Build) 事件會建立 main.cpp 的複本,「連結前」(Pre-Link) 事件會建立 main.obj 的複本,而「建置後」(Post-Build) 事件則會建立 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 來建立 Visual C++ 專案

其他資源

MSBuild (Visual C++)