我正在使用自己的图形编辑器开发DSL。此类文件具有.own扩展名。我还有一个小工具,可以将.own文件编译成.h文件。
X.own - > X.h和X / *。h
我写了一个简单的.rules文件来启动这一代。
我的问题如下: 我的大多数源文件都包含X.h,但X.own中的更改并不意味着生成的X.h(或任何其他生成的文件)将不同。这是由生成器通过使用临时文件和文件比较来处理的。但Visual Studio似乎并不知道如何处理这一切。如果我将“输出文件”属性设置为正确的文件,它始终假定它们将被更改。如果我不这样做,它会假设它们不会生成它的构建过程!
我怎样才能把事情做对?
1)启动自定义构建工具
2)根据依赖性计算构建过程
答案 0 :(得分:1)
不要使用自定义构建工具选项,而是将其设置为解决方案的预构建事件(这可以采用通用命令行,就像自定义构建工具一样)。这样MSVS就不会检查生成的文件。只要它们是#included或在解决方案资源管理器中列出,它们就应该被编译好,因为.h文件的生成将在任何其他编译之前发生。
我发现自定义构建工具通常不像构建前和构建后事件那么有用,因为它需要生成或修改文件的方式。您可能会发现此工具对将来的其他内容非常有用(例如,在构建后压缩.exe,正确生成其他依赖项,以确保文件到位等等)
有一个很好的图表,显示了在解决方案属性here
中找到这些选项的位置答案 1 :(得分:0)
没有办法(或至少我没有发现任何东西)“拥有一切”。我找到的唯一方法是让文件更新时自定义构建工具返回非零数字,并向用户发送一条消息,说明不错误并邀请他启动再建一次。下一次,自定义构建工具再次启动(不是最佳,但我使用的工具非常快)但修改了没有新文件,并且使用有效的依赖项继续构建过程。
注意:上述方法不适用于Incredibuild,它似乎忽略了项目构建顺序。