T4 模板文件可在 C# 项目下由 IDE 自动识别,但我不知道如何将它们集成到 C++ 项目中(除了使用 make 文件)。
有任何想法吗?
T4 模板文件可以集成到 C++ 项目中,但它比 C#/VB 项目需要更多的工作。在您的 C++ 项目中创建一个新的文本文件并为其提供 .tt 扩展名。然后像往常一样编写模板。然后,C++ 项目需要进一步的工作以使其转换模板。我让它工作的快速而肮脏的方法是添加一个自定义构建步骤并让它直接调用“C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.1\TextTransform.exe”。我发现的另一种方法是添加自定义 MSBuild 任务。说明可以在这里找到
此页面包含更多信息和一些关于使用 T4 代码生成的其他页面的良好链接。
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)
其他答案中列出的命令部分不正确,因为文件TextTransform.exe
已移动到新目录:devenv
根文件夹,例如:
C:\Progra~1\Visual Studio 2017\Enterprise\Common7\IDE
该命令现在应该更新为以下内容:
"$(DevEnvDir)TextTransform.exe" -out "$(ProjectDir)xxx.cpp" "$(ProjectDir)xxx.tt"
你的模板文件xxx
的文件名在哪里.tt
在尝试了上述一些方法(发现它们不适合我的具体情况)后,我采取了另一种方法,其他人可能会觉得有帮助。
我没有努力让 VS 在 C++ 项目中接受 T4 模板,而是在我的解决方案中添加了一个单独的(空的)C# 项目。我将我的模板文件放在解决方案的根目录,并从 C# 项目中添加一个指向它的链接。我#include 从我的 C++ 项目中生成的 .h 文件。
我使用模板生成了一个版本字符串,该字符串会随着每次构建而更新。我将AutoT4工具添加到 VS,以便每次构建解决方案时都会更新字符串。