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

时间:2017-12-08 09:19:58

标签: t4

我使用TextTransform.exe生成多个C ++文件。由于该工具不直接在Visual Studio for C ++项目中支持,因此我通过命令行(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\14.0\TextTransform.exe"
-out "<what to put here that NO file is generated?>"
C:\Test.tt

我正在使用Microsoft Windows。也许有一个&#34; hack&#34;提供任何可以被程序接受的特殊字符,但是不可能实际创建一个文件。

执行此命令时是否有可能提供任何生成NO文件的命令?

更新

如@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.

我达到了我想要的水平,但事实并非如此&#34;很好&#34;构建操作失败。

3 个答案:

答案 0 :(得分:6)

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

在linux中,我们有一个名为/dev/null的奇妙事物,对于像这样的事情来说,它本质上是一个空洞的空洞。我做了一个快速搜索,Windows让它拥有它的等效性:NUL

因此,您想要的命令是:

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

答案 1 :(得分:1)

没有。构建文本转换的方式只被认为是生成单个输出文件。多输出是T4模板的逻辑演变,但微软多年来一直没有进化过它。

您正在使用的代码(就像我一样)基本上是一个黑客。它使用一种非常丑陋的方式使用EnvDTE来操纵项目系统,当MS决定重写该系统时,可能最终无法正常工作(并且有人可能会认为那一天即将到来)。

例如,T4编辑器实现相同的方法略有不同,但您可以看到输出仍然生成&#34;虚拟文件&#34;:

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

答案 2 :(得分:0)

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

所以我在“命令行”中输入的命令现在包含 two 行:

"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. 第二行只是删除了我不需要的文件。
  3. 此命令需要项目变量calles“TempOutputFile”。通过这种方式,我跳过任何拼写错误。例如:

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