Шаг за шагом, как добавить настраиваемый шаг сборки для каждого файла данного типа в Visual Studio 2010?
Проблема
- У меня есть куча пользовательских файлов в проекте visual studio 2010.
- Мне нужно запустить инструмент для этих пользовательских файлов, когда они меняются.
- Инструмент генерирует файлы .h, входящие в состав существующих файлов .cpp.
- Я хочу, чтобы инструмент выполнялся как часть процесса сборки.
- Он должен запускаться из визуальной студии, но в идеале может также выполняться как часть процесса msbuild.
Существующие субстандартные решения
В каждом файле каждый раз, когда я его добавляю, я могу перейти к настройкам файла, установить тип элемента в Custom Build Tool, а затем в диалоговом окне Custom Build Tool, установить параметры командной строки, установить (hardcoded) выходов и установить (жестко закодированные) дополнительные зависимости.
Очевидно, что это плохое решение, потому что оно является нетривиальным и подверженным ошибкам количеством работы при каждом добавлении нового файла настраиваемого типа.
Желаемое решение
Я установил визуальную студию, которая для любого файла расширения .foo запускает tool bar.exe, когда файл .foo изменяется, прежде чем компилирует код CPP.
Вещи, которые я предпринял
Исходя из этого: http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx
Я попытался создать файл .targets и .xml. Однако я не могу узнать, как создать новый тип элемента, чтобы он отображался в визуальной студии, и я не могу понять, как сделать его магическим образом применимым к каждому файлу типа .foo. Кроме того, я не понял, как в любом случае это связано с тем, что описывает действие вызова моего инструмента bar.exe.
Я попытался выполнить поиск по всем файлам xml/target в visual studio, чтобы отслеживать существующие типы элементов и определять, как они преобразуются в фактические действия сборки. Он всегда заканчивается на стене ItemType, где есть куча, описанная в ProjectItemsSchema, но я не могу найти, где они реализованы, или как я могу реализовать их самостоятельно.
Документация MSDN была полной неудачей, и я думаю, что я читал каждую потенциально связанную страницу десять раз, но безрезультатно.
В visual studio 2008 у меня была такая работа с файлом .rules, который выглядел так:
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="Foo Build Rules"
Version="8.00"
>
<Rules>
<CustomBuildRule
Name="FooBuild"
DisplayName="FooGen"
CommandLine="..\..\tools\FooGen.exe [inputs]"
Outputs="$(InputName).h"
AdditionalDependencies="*.foo"
FileExtensions="*.foo"
ExecutionDescription="Generating Foos..."
>
<Properties>
</Properties>
</CustomBuildRule>
</Rules>
</VisualStudioToolFile>
Однако в 2010 году эта функциональность устарела, и мне не удалось выяснить, как ее реплицировать с помощью новой системы.
Справка
Ответы
Ответ 1
Начните с добавления пользовательской ItemGroup в файл проекта.
Как ниже:
<ItemGroup>
<CustomBuild Include="faq.txt">
<Message>Copying readme...</Message>
<Command>copy %(Identity) $(OutDir)%(Identity)</Command>
<Outputs>$(OutDir)%(Identity)</Outputs>
</CustomBuild>
</ItemGroup>
Затем создайте настраиваемую цель и определите, где в процессе сборки вы хотите запускать свои пользовательские цели в процессе сборки.
Ниже приведены ссылки более подробно и шаг за шагом.
Надеюсь, что это поможет.
Проход: использование MSBuild для создания проекта Visual С++
Как добавить пользовательские инструменты сборки в проекты MSBuild
Примечание: В текущей версии среда IDE не поддерживает создание новых правил. По этой причине самый простой способ использования файла правил из проекта, созданного с использованием более ранней версии Visual С++, заключается в переносе проекта на текущую версию.