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

标签 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) 根据依赖关系计算构建过程

最佳答案

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

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

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

关于c++ - 在 C++ 项目中使用特定领域的语言文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/528494/

相关文章:

c++ - CUDA 点积

用于枚举类型的 C# IntelliSense

c# - 如何在没有任何错误或警告的情况下找到构建失败的原因

c++ - 使用C++生成问题-C++/CLI-C#项目(Borland和VS特定组件)

build-process - ./configure 有什么用(除了检查依赖关系)

c++ - 如果我对 float 变量使用 malloc 和 calloc 并将其分配给 int 那么其余 2 个字节会发生什么?

c# - Visual Studio 2008 文件夹浏览器对话框

c++ - 在参数评估顺序中警告 UB

c++ - CPP : avoiding macro expansion of a macro function parameter

java - 程序可以在编译期间依赖库而不是运行时吗?