visual-studio-2010 - 逐步如何在Visual Studio 2010中为给定类型的每个文件添加自定义生成步骤?

标签 visual-studio-2010 msbuild code-generation build-process customtool

问题

  • 我在Visual Studio 2010项目中有一堆自定义文件。
  • 当它们更改时,我需要在这些自定义文件上运行工具。
  • 该工具生成现有.cpp文件包含的.h文件。
  • 我希望该工具在构建过程中运行。
  • 它需要在Visual Studio中运行,但理想情况下也可以作为msbuild进程的一部分运行。

  • 现有不合标准的解决方案

    在每个文件上,每次添加文件时,我都可以转到文件设置,将“项目类型”设置为“自定义构建工具”,然后在“自定义构建工具”对话框中,设置命令行参数,设置(硬编码)输出,以及设置(硬编码)其他依赖项。

    显然,这是一个较差的解决方案,因为每次您添加自定义类型的新文件时,这都是繁琐且容易出错的工作。

    所需的解决方案

    我设置了Visual Studio,对于.foo扩展名的任何文件,当.foo文件更改时,它都会运行工具bar.exe,然后再编译CPP代码。

    我尝试过的事情

    基于此:http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx
    我试图设置一个.targets和.xml文件。但是,我找不到如何在Visual Studio中显示新的Item Type的方法,也找不到如何神奇地将其应用于.foo类型的每个文件的方法。最重要的是,我还没有弄清楚其中的任何内容如何链接到描述调用bar.exe工具的行为的任何内容。

    我试图搜索所有Visual Studio的xml / targets文件,以跟踪现有的项目类型并确定如何将它们转换为实际的构建操作。它总是结束于ItemType的墙,在ProjectItemsSchema中描述了一堆,但是我找不到它们的实现位置或自己的实现方式。

    MSDN的文档已完全失败,我想我已经阅读了每一个潜在的相关页面十次,但无济于事。

    在visual studio 2008中,我使用.rules文件来处理这种事情,如下所示:
    <?xml version="1.0" encoding="utf-8"?>
    <VisualStudioToolFile
    Name="Foo Build Rules"
    Version="8.00"
    >
    <Rules>
        <CustomBuildRule
            Name="FooBuild"
            DisplayName="FooGen"
            CommandLine="..\..\tools\FooGen.exe [inputs]"
            Outputs="$(InputName).h"
            AdditionalDependencies="*.foo"
            FileExtensions="*.foo"
            ExecutionDescription="Generating Foos..."
            >
            <Properties>
            </Properties>
        </CustomBuildRule>
    </Rules>
    </VisualStudioToolFile>
    

    但是,此功能在2010年已弃用,我一直无法弄清楚如何用新系统复制它。

    救命?

    最佳答案

    首先将自定义ItemGroup添加到您的项目文件中。

    如下所示:

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

    接下来,创建一个自定义目标,并定义要在构建过程中的何处运行自定义目标。

    以下链接将更详细地逐步说明。

    希望这可以帮助。

    Walk-through: Using MSBuild to Create a Visual C++ Project

    How to: Add Custom Build Tools to MSBuild Projects

    Note:在当前版本中,IDE不支持创建新规则。出于这个原因,使用通过使用Visual C++的较早版本创建的项目中的规则文件的最简单方法是将项目迁移到当前版本。

    关于visual-studio-2010 - 逐步如何在Visual Studio 2010中为给定类型的每个文件添加自定义生成步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13181614/

    相关文章:

    c++ - 静态链接时,链接器是否包含整个库?

    kotlin - 使用文件模板生成 Kotlin 代码

    c++ - 编译/使用谷歌测试

    visual-studio-2010 - 我可以在构建解决方案时强制 Visual Studio (2010) 执行 "Save All"吗?

    visual-studio - VisualHg 和 Visual Studio 2010 性能问题

    c# - 加快 MSBuild 构建过程

    msbuild - GAC 中的程序集未复制到引用项目的输出中,该项目引用了使用 CopyLocal=true 的 GAC 程序集

    .net - 在 C# 项目中覆盖 BuildDependsOn 时遇到问题

    c++ - 如何在代码生成期间简化包含变量的 C 风格算术表达式?

    unit-testing - 测试 - 生成不符合架构的 xml 文件