如何:在 MSBuild 项目中使用生成事件

生成事件是 MSBuild 在生成过程中的特定阶段执行的命令。 “预先生成”事件发生在生成开始前;“预链接”事件发生在链接步骤开始前;“后期生成”事件发生在生成成功结束之后。 仅当关联的生成步骤发生时,生成事件才会发生。 例如,如果链接步骤未运行,则不会发生预链接事件。

所有三个生成事件都由所执行的命令元素 (<Command>) 以及在 MSBuild 执行生成事件时显示的消息元素 (<Message>) 在项定义组中进行表示。 每个元素都是可选的,如果多次指定同一个元素,则最后一次出现的元素优先。

可以在属性组中指定可选的“在生成中使用”元素 (<build-eventUseInBuild>),以指明是否执行生成事件。 use-in-build 元素的内容值为 truefalse。 默认情况下会执行生成事件,除非其对应的 use-in-build 元素设置为 false

下表列出了每个生成事件 XML 元素:

XML 元素 说明
PreBuildEvent 此事件在生成开始之前执行。
PreLinkEvent 此事件在链接步骤开始之前执行。
PostBuildEvent 此事件在生成完成之后执行。

下表列出了每个“在生成中使用”元素:

XML 元素 说明
PreBuildEventUseInBuild 指定是否执行预先生成事件。
PreLinkEventUseInBuild 指定是否执行预链接事件。
PostBuildEventUseInBuild 指定是否执行后期生成事件。

示例

下面的示例可以添加到在演练:使用 MSBuild 创建 C++ 项目中创建的 myproject.vcxproj 文件的 Project 元素内。 预先生成事件会创建 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++
演练:使用 MSBuild 创建 C++ 项目