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

8
我正在使用TextTransform.exe生成多个C++文件。由于该工具在Visual Studio的C++项目中没有直接支持,因此我通过命令行调用它(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\14.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.

我达到了想要的结果,但构建操作失败并不太“好”。
3个回答

6

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

在Linux中,我们有一个称之为/dev/null的神奇东西,它本质上就是一个空虚的地方,专门用于处理此类事情。我做了一个快速搜索,发现Windows也有自己的等价物:NUL

因此,你需要的命令是:

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

谢谢您的回复。我一定会检查一下。我不想使用工具创建的标准文件,因为我自己在tt文件中创建了多个文件。 - Bruno Bieri
请看我的更新问题。也许你有另一个修复方法。 - Bruno Bieri
1
那很难。也许有一种不同的方法来完成你正在做的事情。 - ImprobabilityCast

1
不行。文本转换的方式只能生成单个输出文件。多输出是T4模板的逻辑演进,但微软多年来没有发展它。
你正在使用的代码(我也是)基本上是绕过了这个问题的一种方法。它使用了一种非常丑陋的方式来使用EnvDTE来操作项目系统,这可能会在某些时候停止工作,当微软决定重写该系统时(人们可以争论那天即将到来)。
例如,T4-editor有一种稍微不同的方式来实现相同的事情,但您可以看到输出仍然会产生“虚拟文件”。

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


谢谢你的回答,Hugo。我知道它不受支持,也知道EnvDTE的黑客方法。我在寻找一个更加巧妙的黑客方法。;-) - Bruno Bieri

0

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

因此,我现在将命令放入“命令行”中包含两个行:

"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.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>

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