如何:向 MSBuild 项目添加自定义生成工具

自定义生成工具是一种与特定文件关联的用户定义的命令行工具。

对于特定文件,请在项目文件 (.vcxproj) 中指定要执行的命令行、任何其他输入或输出文件,以及要显示的消息。 如果 MSBuild 确定输出文件相对于输入文件而言已过期,则会显示消息并执行命令行工具。

指定自定义生成工具和自定义生成步骤

若要指定自定义生成工具的执行时间,请在项目文件中使用 CustomBuildBeforeTargets 和/或 CustomBuildAfterTargets XML 元素。 例如,可以指定自定义生成工具在 MIDL 编译器之后和 C/C++ 编译器之前运行。 指定要在运行特定目标之前执行该工具的 CustomBuildBeforeTargets 元素。 使用要在运行特定目标之后执行该工具的 CustomBuildAfterTargets 元素。 使用这两个元素在两个目标执行之间运行该工具。 如果未指定任一元素,则自定义生成工具会在其默认位置(MIDL 目标之前)执行。

自定义生成步骤和自定义生成工具共享在 CustomBuildBeforeTargetsCustomBuildAfterTargets XML 元素中指定的信息。 只需在项目文件中指定这些目标一次。

添加自定义生成工具

  1. 向项目文件添加一个项组,并为每个输入文件添加一个项。 指定命令及其输入、其他输入、输出和消息作为项元数据,如下所示。 此示例假定“faq.txt”文件与项目位于同一目录中。 自定义生成步骤将其复制到输出目录。

    <ItemGroup>
      <CustomBuild Include="faq.txt">
        <Message>Copying readme...</Message>
        <Command>copy %(Identity) $(OutDir)%(Identity)</Command>
        <Outputs>$(OutDir)%(Identity)</Outputs>
      </CustomBuild>
    </ItemGroup>
    

定义将在生成中的何处执行自定义生成工具

  1. 将以下属性组添加到项目文件。 必须指定至少一个目标。 如果只想在特定目标之前(或之后)执行生成步骤,则可以省略另一个目标。 此示例在编译之后但在链接之前执行自定义步骤。

    <PropertyGroup>
      <CustomBuildAfterTargets>ClCompile</CustomBuildAfterTargets>
      <CustomBuildBeforeTargets>Link</CustomBuildBeforeTargets>
    </PropertyGroup>
    

另请参阅

演练:使用 MSBuild 创建 C++ 项目
如何:在 MSBuild 项目中使用生成事件
如何:向 MSBuild 项目添加自定义生成步骤
用于 MSBuild 命令和属性的常用宏
MSBuild 常见的项元数据