如何在VS C++项目中使用T4代码生成模板?

12

T4模板文件在C#项目下会被IDE自动识别,但是我不知道它们如何可以集成到C++项目中(除了使用makefile之外)。

有什么想法吗?

4个回答

15
T4模板文件可以集成到C++项目中,但与C#/VB项目相比需要更多的工作。在C++项目中创建一个新的文本文件并将其命名为.tt扩展名,然后按照正常方式编写模板。然后,C++项目需要进一步处理才能转换模板。我用的快速而简单的方法是添加自定义构建步骤,并直接调用"C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.1\TextTransform.exe"。我找到的另一种方法是添加自定义MSBuild任务。有关说明可以在这里找到。 页面提供了更多信息和一些有关使用T4代码生成的其他页面的良好链接。

不知何故它似乎无法工作。尝试创建一个新的Win32 C++项目。然后添加一个简单的.tt文件并点击构建。没有任何生成。 - Filip Frącz
谢谢你的回答。它可以工作,但明显不如C#方便。希望这在即将推出的VS 2010中会有所改变。 - Filip Frącz

6

由于这是一个vcproj文件(C ++),因此MSBuild任务将无法工作,而需要使用vcbuild。最简单的方法是添加自定义生成步骤如下所示,以编译tt。

"C:\Program Files (x86)\Common Files\Microsoft Shared\TextTemplating\1.1\TextTransform.exe" -out "$(ProjectDir)\VSProject.cpp" -I "$(ProjectDir)" "$(ProjectDir)\VSProject.tt"

我花了数小时研究上述MSBuild任务解决方案,对于托管代码而言非常好,但是我无法看到任何用于C ++的方法(除了将vcproj转换为csproj)。


1
即使有了这个解决方案,您仍然需要手动将cpp文件添加到vcproj文件中吗? - MrSlippers

4

针对Visual Studio 2017(或者可能是2015?)

其他答案中列出的命令部分是不正确的,因为文件TextTransform.exe已经被移动到一个新目录下:即devenv根目录下,例如:

C:\Progra~1\Visual Studio 2017\Enterprise\Common7\IDE

命令现在应该更新为以下内容:
"$(DevEnvDir)TextTransform.exe" -out "$(ProjectDir)xxx.cpp" "$(ProjectDir)xxx.tt"

其中xxx是您的.tt模板文件的文件名。


1
如果有人在寻找,C:\Program Files...\Common7\IDE 在开发者控制台中是在 DevEnvDir 环境变量下的。 - MHebes

0

在尝试了上述一些方法(发现它们不适用于我的特定情况)后,我采取了不同的方法,其他人可能会发现有帮助。

与其为了让VS接受C++项目中的T4模板而进行斗争,我向我的解决方案中添加了一个单独的(空的)C#项目。我将我的模板文件放在解决方案的根目录下,并从C#项目中添加了一个链接。我从我的C++项目中#include生成的.h文件。

我使用模板生成了一个版本字符串,该字符串随每次构建更新。我向VS添加了AutoT4工具,以便该字符串在解决方案的每次构建时都会更新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接