代码之家  ›  专栏  ›  技术社区  ›  Filip Frącz

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

  •  10
  • Filip Frącz  · 技术社区  · 16 年前

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

    有什么想法吗?

    3 回复  |  直到 15 年前
        1
  •  13
  •   GarethJ    12 年前

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

    This 该页面提供了有关使用T4代码生成的更多信息和一些到其他页面的良好链接。

        2
  •  5
  •   James    6 年前

    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"
    

    我花了几个小时研究MSBug任务解决方案,它对托管代码非常好,但我看不到它可以用于C++(Bar将VCPROJ转换为CSPROJ EEK)。

        3
  •  2
  •   Community CDub    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 模板文件

        4
  •  0
  •   Phil Atkin    5 年前

    在对上面的一些方法进行了实验之后(发现它们不适合我的具体情况),我采取了其他人可能会觉得有用的不同方法。

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

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