Как использовать шаблоны генерации кода T4 в проектах VS C ++?
-
20-08-2019 - |
Вопрос
Файлы шаблонов T4 автоматически распознаются IDE в проектах C #, но я понятия не имею, как их можно интегрировать в проекты C ++ (кроме использования файлов make).
Есть какие-нибудь идеи?
Решение
Файлы шаблонов T4 могут быть интегрированы в проекты на C ++, но это требует немного больше работы, чем с проектом на C # / VB.Создайте новый текстовый файл в вашем проекте на C ++ и присвойте ему расширение .tt.Затем напишите свой шаблон как обычно.Затем проект на C ++ нуждается в дальнейшей работе, чтобы заставить его преобразовать шаблоны.Быстрый и грязный способ, которым я заставил это работать, состоял в том, чтобы добавить пользовательский шаг сборки и вызвать его напрямую "C:\Program Files\ Common Files\ Microsoft Shared extTemplating\1.1 extTransform.exe".Другой способ, который я нашел, состоял в том, чтобы добавить пользовательскую задачу MSBuild.Инструкции можно найти здесь
Это страница содержит больше информации и несколько хороших ссылок на другие страницы по использованию генерации кода T4.
Другие советы
Задача 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)
Для 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
файл шаблона