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

时间:2009-01-30 16:42:57

标签: c++ visual-studio t4

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

有什么想法吗?

4 个答案:

答案 0 :(得分:11)

T4模板文件可以集成到C ++项目中,但它比C#/ VB项目要多一些。在C ++项目中创建一个新的文本文件,并为其提供.tt扩展名。然后正常编写模板。然后,C ++项目需要进一步的工作来使其转换模板。我让它工作的快速和脏的方法是添加一个自定义生成步骤,并让它直接调用“C:\ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.1 \ TextTransform.exe”。我找到的另一种方法是添加自定义MSBuild任务。可以找到说明here

This页面提供了更多信息以及与使用T4代码生成的其他页面的一些良好链接。

答案 1 :(得分:4)

MSBuild任务无法正常工作,因为这是一个vcproj文件(C ++),因此使用了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 Task解决方案,它对托管代码非常有用,但是我看不到任何方法将它用于C ++(将vcproj转换为csproj eek)

答案 2 :(得分:1)

对于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模板文件的文件名

答案 3 :(得分:0)

尝试了以上一些方法(发现它们不适合我的具体情况),我采取了其他方法可能会有所帮助的另一种方法。

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

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