1

我正在使用自己的图形编辑器开发 DSL。此类文件具有 .own 扩展名。我还有一个小工具,可以将 .own 文件编译成 .h 文件。

X.own --> Xh 和 X/*.h

我编写了一个简单的 .rules 文件来启动生成。

我的问题如下:我的大多数源文件都包含 Xh,但 X.own 的更改并不意味着生成的 Xh(或任何其他生成的文件)会有所不同。这由生成器通过使用临时文件和文件比较来处理。但是 Visual Studio 似乎并不知道如何处理这一切。如果我将“输出文件”属性设置为正确的文件,它总是假定它们将被更改。如果我不这样做,它会假设它们不会生成它的构建过程!

我怎样才能把事情做好?

1)启动自定义构建工具

2)基于依赖计算构建过程

4

2 回答 2

1

不要使用自定义构建工具选项,而是将其设置为解决方案的预构建事件(这可以采用通用命令行,就像自定义构建工具一样)。这样 MSVS 将不会检查生成的文件。只要它们被#included 或列在解决方案资源管理器中,它们就应该被很好地编译,因为 .h 文件的生成将在任何其他编译之前发生。

我发现自定义构建工具通常不如构建前和构建后事件有用,因为它期望生成或修改文件的方式。您可能会发现此工具在将来对其他事情有用(例如,在构建后压缩 .exe、正确生成其他依赖项、确保文件就位等...)

有一个很好的图表显示在哪里可以找到解决方案属性中的这些选项here

于 2009-02-09T15:57:28.383 回答
0

jheriko 的回答很有趣,因为它提供了一种启动自定义工具,然后生成构建依赖项的方法。但它不是很有用,因为你失去了使用“自定义构建工具”工具包的所有可能性,你可以在其中

  • 选择始终编译具有某些精确扩展名的文件
  • 手动跳过特定项目配置中特定文件的自定义构建(并可视化此决定)

没有办法(或者至少我没有找到)“拥有一切”。我发现的唯一方法是让自定义构建工具在文件更新后返回一个非零数字,并向用户说明这不是错误并邀请他再次启动构建。下一次,自定义构建工具再次启动(不是最佳的,但我使用的工具非常快)但没有修改新文件,并且构建过程继续,使用有效的依赖关系。

注意:上述方法不适用于 Incredibuild,它似乎忽略了项目构建顺序。

于 2009-04-03T12:14:59.343 回答