Как использовать шаблоны генерации кода T4 с проектами VS C ++? - PullRequest
10 голосов
/ 30 января 2009

Файлы шаблонов T4 автоматически распознаются средой IDE в проектах C #, но я понятия не имею, как их можно интегрировать в проекты C ++ (кроме использования файлов make).

Есть идеи?

Ответы [ 3 ]

11 голосов
/ 02 февраля 2009

Файлы шаблонов T4 могут быть интегрированы в проекты C ++, но это немного сложнее, чем с проектом C # / VB. Создайте новый текстовый файл в своем проекте C ++ и дайте ему расширение .tt. Затем напишите свой шаблон как обычно. Затем проект C ++ нуждается в дальнейшей работе, чтобы заставить его трансформировать шаблоны. Быстрый и грязный способ, которым я заставил его работать, заключался в добавлении пользовательского шага сборки и его непосредственного вызова «C: \ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.1 \ TextTransform.exe». Другой способ, который я нашел, - добавить пользовательскую задачу MSBuild. Инструкции можно найти здесь

Эта страница содержит больше информации и несколько хороших ссылок на другие страницы по использованию генерации кода T4.

4 голосов
/ 27 июня 2009

Задача 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"

Я потратил несколько часов на изучение решения задачи MSBuild, описанного выше, и это довольно хорошо для управляемого кода, но я не вижу способа использовать его для C ++ (без преобразования vcproj в csproj eek)

1 голос
/ 19 июля 2018

Для 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 - имя файла yout .tt file template

...