【发布时间】:2012-10-22 07:23:59
【问题描述】:
问题
- 我在一个 Visual Studio 2010 项目中有一堆自定义文件。
- 当这些自定义文件发生变化时,我需要对它们运行一个工具。
- 该工具会生成包含在现有 .cpp 文件中的 .h 文件。
- 我希望该工具作为构建过程的一部分运行。
- 它需要在 Visual Studio 中运行,但理想情况下也可以作为 msbuild 进程的一部分运行。
现有不合标准的解决方案
在每个文件上,每次添加时,我都可以进入文件设置,将Item Type设置为Custom Build Tool,然后在Custom Build Tool对话框中,设置命令行参数,设置(硬编码)输出,并设置(硬编码)附加依赖项。
显然,这是一个糟糕的解决方案,因为每次添加自定义类型的新文件时,它的工作量都很大且容易出错。
想要的解决方案
我设置了 Visual Studio,对于任何扩展名为 .foo 的文件,它都会在 .foo 文件更改时运行工具 bar.exe,然后再编译 CPP 代码。
我尝试过的事情
基于此:http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx 我试图建立一个 .targets 和 .xml 文件。但是,我不知道如何创建一个新的项目类型以便它显示在 Visual Studio 中,我也不知道如何让它神奇地应用于每个 .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 年已被弃用,我一直无法弄清楚如何在新系统中复制它。
帮助?
【问题讨论】:
-
这些是我在 2008 年使用的。它们在 2008 年不再工作。
-
我想你一定也读过这个:blogs.msdn.com/b/vcblog/archive/2010/04/21/…。引起我注意的是,根据这个,你也需要一个 .props 文件,也许这就是你所缺少的。不过自己没试过......
标签: visual-studio-2010 msbuild code-generation build-process customtool