Итак, по разным «скучным» причинам я застрял на VC++ 2008.
Теперь у меня есть пользовательское правило сборки, которое анализирует файл «.h» и создает файл .cpp.
Правило сборки работает нормально, когда я могу получить параметр в .vcproj (он отображается как элемент ‹Tool Name="my rule"/› как дочерний элемент элементов ‹FileConfiguration> для каждого элемента ‹File>).
В файле «.rule» атрибут FileExtension, который я указал, имеет значение «*.hxx», а не «*.h», поскольку я не хочу, чтобы пользовательское правило выполнялось для каждого .h, а только те, которые я хочу . Изменение расширения файлов для запуска правила на что-то другое, кроме .h, не является вариантом по причинам, которые я не могу контролировать.
Правило работает нормально, сгенерированный .cpp компилируется, все зависимости и т. д. работают, т. е. VC++ выполняет пользовательский шаг только при изменении .h и т. д.
Ручной взлом xml в .vcproj заставляет работать, проблема в том, что графический интерфейс Visual Studio продолжает возиться с настройкой инструмента и удалять его из «.vcproj». Я не определил точно, при каких условиях Visual Studio искажает настройки, поскольку они несколько случайны, но в основном, когда необходимо сохранить какие-либо изменения в проекте, это мое наблюдение.
Иногда (не всегда) я могу вручную изменить инструмент на странице свойств в графическом интерфейсе Visual Studio, и он сохранит его для активной конфигурации (например, «Отладка»), но когда я попытаюсь добавить его в другие конфигурации (например, «Выпуск " или "Все конфигурации"), графический интерфейс запутается и удалит настройку инструмента для всех конфигураций вместо того, чтобы добавить ее для другой конфигурации.
Кажется, это происходит также, если я сначала изменяю активную конфигурацию -> когда вы переходите к настройке пользовательского инструмента, он запутывается и удаляет настройку из всех конфигураций.
Мне удалось заставить аналогичные правила работать нормально, когда входной файл для настраиваемого правила имеет уникальное расширение, похоже, оно связано с входным именем, соответствующим «.h», и правилом по умолчанию для .h, а мое «. rule" не указывает соответствующий шаблон соответствия.
Обратите внимание, что эта настройка с несоответствующим шаблоном FileExtension — это то, что было рекомендовано в MSDN для VC++ 2008, поэтому я сделал это именно так.
У кого-нибудь были подобные проблемы? Любые подсказки о том, каким может быть надежное решение и/или обходной путь?
Мне просто нужно сохранить настройку в контексте того, что NOOBS может использовать графический интерфейс VS, поэтому вы не можете доверять им, чтобы они не делали «определенных вещей».