在C ++项目中使用特定于域的语言文件

时间:2009-02-09 15:01:52

标签: c++ visual-studio build-process dsl

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

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

我写了一个简单的.rules文件来启动这一代。

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

我怎样才能把事情做对?

1)启动自定义构建工具

2)根据依赖性计算构建过程

2 个答案:

答案 0 :(得分:1)

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

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

有一个很好的图表,显示了在解决方案属性here

中找到这些选项的位置

答案 1 :(得分:0)

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

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

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

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