2009-02-09 93 views
1

我正在用自己的图形编辑器开发DSL。这样的文件有一个.own扩展名。我也有一个将.own文件编译成.h文件的小工具。在C++项目中使用特定于域的语言文件

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

我写了一个简单的.rules文件启动发电。

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

我该怎么做才好?

1)启动自定义生成工具

2)计算构建基于依赖

过程

回答

0

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

  • 选择始终编译一些精确的扩展
  • 手动跳过文件自定义生成特定文件在一个特定的项目配置(并可视化这一决定)

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

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

1

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

我发现自定义构建工具并不像通常的构建前和构建后事件那样有用,因为它希望生成或修改文件的方式。你可能会发现这个工具对于将来的其他事情很有用(例如为了在构建之后压缩.exe,正确地生成其他依赖关系,以确保文件就位等...)

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

+0

谢谢,我会研究一下。但我不禁想知道...如果我不使用规则文件,每次添加或重命名时,我都必须修改预生成事件。自己的文件? – 2009-02-09 16:15:53

相关问题