C++ 转换 T4 模板忽略输出文件

C++ transform T4 template ignore output file

我正在使用 TextTransform.exe 生成多个 C++ 文件。由于 C++ 项目 Visual Studio 不直接支持该工具,因此我通过命令行 (inspired by T4 Generating C++ Code) 调用它。

为了生成多个文件,我使用 https://github.com/areve/Entity-Framework-T4-Templates/blob/master/src/dev/MultiOutput.tt 这就是为什么我不需要该工具正常生成的标准输出的原因。

我这样称呼TextTransform.exe

"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating.0\TextTransform.exe"
-out "<what to put here that NO file is generated?>"
C:\Test.tt

我正在使用 Microsoft Windows。也许有一个 "hack" 来提供程序可以接受的任何类型的特殊字符,但实际上不可能从中创建文件。

是否可以提供任何在我执行此命令时不生成文件的命令?


更新

如@ImprobabilityCast 所述,使用 NUL 是一种可行的方法。它没有生成任何文件,但是我 运行 tt 文件的自定义构建失败并显示消息:

Performing Custom Build Tools
CUSTOMBUILD : error : FileStream will not open Win32 devices such as disk partitions and tape drives. Avoid use of "\.\" in the path.

我达到了我想要的效果,但 "nice" 构建操作失败并非如此。

没有。文本转换的构建方式被认为只产生一个输出文件。多输出是 T4 模板的逻辑演变,但 Microsoft 多年来一直没有对其进行改进。

您正在使用的代码(我也是)基本上是对它的破解。它使用一种非常丑陋的方式使用 EnvDTE 来操纵项目系统,当 MS 决定重写该系统时,该系统可能最终无法正常工作(有人可能会争辩说那一天即将到来)。

例如,

T4-editor 实现相同功能的方式略有不同,但您可以看到输出仍然会产生 "dummy file":

http://t4-editor.tangible-engineering.com/blog/how-to-generate-multiple-output-files-from-a-single-t4-template.html

不确定您为什么不想要这些文件,但是...

在 linux 中,我们有一个很棒的东西,叫做 /dev/null,它本质上是一个空洞,只是为了这样的事情。我快速搜索了一下,Windows 有自己的等价物:NUL

因此,你想要的命令是:

"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating.0\
TextTransform.exe" -out NUL C:\Test.tt

我已经为我的问题找到了令人满意的解决方案。由于 Microsoft Visual Studio 允许自定义构建工具输入多行,我意识到我可以删除不需要的 TextTransform.exe 生成的文件。

所以我输入 "Command Line" 的命令现在包含 two 行:

"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating.0\TextTransform.exe" -out "%(DefiningProjectDirectory)$(TempOutputFile)" C:\Test.tt
DEL /F "%(DefiningProjectDirectory)$(TempOutputFile)"
  1. 第一行是实际的 TextTransform 调用,它生成我想要的所有文件,包括我不需要但无法停止创建的输出文件。
  2. 第二行只是删除了我不需要的文件。

此命令需要一个项目变量调用 "TempOutputFile"。这样我就跳过了任何错字。例如:

<PropertyGroup Label="Globals">
  <TempOutputFile>DoNotCheckin.h</TempOutputFile>
</PropertyGroup>