2017-12-08 103 views
9

Używam TextTransform.exe do generowania wielu plików C++. Ponieważ narzędzie nie jest obsługiwane bezpośrednio w projektach programu Visual Studio for C++, wywołuję go za pomocą wiersza polecenia (inspired by T4 Generating C++ Code).Transformacja C++ Szablon T4 ignoruje plik wyjściowy

W celu wygenerowania wielu plików używam https://github.com/areve/Entity-Framework-T4-Templates/blob/master/src/dev/MultiOutput.tt, dlatego nie potrzebuję standardowego wyjścia, które jest normalnie generowane przez narzędzie.

Wzywam TextTransform.exe jak:

"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 

używam systemu Microsoft Windows. Być może istnieje "hak", który zapewnia jakąś specjalną cechę, która byłaby akceptowana przez program, ale nie byłaby w stanie stworzyć z tego pliku.

Czy istnieje możliwość podania dowolnego polecenia, które generuje plik NO po wykonaniu tego polecenia?


Aktualizacja

Jak wspomniano przez @ImprobabilityCast użyciu NUL jest droga. To nie produkuje żadnego pliku ale zwyczaj budowania gdzie mogę uruchomić plik tt z zawodzi z komunikatem:

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. 

sięgam, co chcę, ale to nie jest tak „miły”, że akcja build zawodzi.

Odpowiedz

0

Znalazłem rozwiązanie satisfing dla mojego problemu. Ponieważ Microsoft Visual Studio pozwala na niestandardowe narzędzia do budowania, aby wprowadzić wiele linii zdałem sobie sprawę, że mogę usunąć plik wygenerowany przez TextTransform.exe, którego nie potrzebuję.

Więc komenda kładę na „Command Line” containt teraz dwie linie:

"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.0\TextTransform.exe" -out "%(DefiningProjectDirectory)$(TempOutputFile)" C:\Test.tt 
DEL /F "%(DefiningProjectDirectory)$(TempOutputFile)" 

Pierwsza linia to rzeczywista rozmowa TextTransform która produkuje mi wszystkie pliki chcę, w tym pliku wyjściowego ja nie potrzeba, ale nie może przestać być tworzony. Druga linia po prostu usuwa plik, którego nie potrzebuję.

To polecenie oczekuje, że zmienna projektu wywoła "TempOutputFile". W ten sposób pomijam wszelkie literówki. Na przykład:

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

Nie. Sposób, w jaki została zbudowana transformacja tekstu, był uważany za jedyny plik wyjściowy. Wydajność wielokrotna była logiczną ewolucją szablonów T4, ale Microsoft nie rozwijał jej od lat.

Kod, którego używasz (jak ja) jest w zasadzie hack dookoła tego. Używa bardzo brzydkiego sposobu używania EnvDTE do manipulowania systemem projektu, który prawdopodobnie skończy się niedziałając w te dni, kiedy MS postanowi przepisać ten system (i można się spierać, że nadchodzi ten dzień).

T4-redaktor, na przykład, ma nieco inny sposób osiągnąć to samo, ale widać, że wyjście nadal produkuje „atrapę plik”:

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

+0

Dziękuję za odpowiedź Hugo. Wiem, że nie jest obsługiwany i jestem świadomy hackowania EnvDTE. Szukam w okolicy hackowania ;-) –

6

nie wiem, dlaczego ty nie Nie chcę plików, ale ...

W Linuksie mamy cudowną rzecz o nazwie /dev/null, która jest zasadniczo pustą pustką tylko dla takich rzeczy. Zrobiłem szybkie wyszukiwanie i Windows ma własne equivilent: NUL

Zatem polecenie chcesz się:

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

Dziękuję za odpowiedź. Na pewno to sprawdzę. Nie chcę standardowego pliku utworzonego przez narzędzie, ponieważ sam tworzę wiele plików w tt. –

+0

Zobacz moje zaktualizowane pytanie. Może masz inny pomysł, jak to naprawić. –

+1

To trudne. Może jest inny sposób robienia tego, co robisz. – ImprobabilityCast