MSBuild без необходимости запускает инструмент custombuild при запуске для разных конфигураций

У меня есть проект на C ++, для которого мне нужно запустить специальный инструмент сборки для некоторых заголовочных файлов, чтобы сгенерировать код, который требуется при компиляции этого проекта. В целом моя конфигурация работает. Я запускаю сборку, VS / MSBuild определяет, актуальны ли выходные файлы, и запускает пользовательский инструмент сборки только при необходимости.

Однако проблема возникает, если сборка выполняется в сочетании с другой конфигурацией того же проекта. Обе конфигурации зависят от выходных файлов пользовательского инструмента сборки. Поэтому при последовательном запуске только одна конфигурация должна запускать пользовательский инструмент сборки. Для какой-либо конфигурации сборка запускается секунду, выходные файлы пользовательского инструмента сборки уже присутствуют и обновлены. Поэтому нет необходимости строить их снова. К сожалению, это именно то, что происходит. Так как запуск специального инструмента сборки занимает довольно много времени, это значительно увеличивает время сборки.
Другой интересный аспект заключается в том, что после запуска обеих конфигураций я могу снова запустить любую из них, и пользовательский инструмент сборки не вызывается.

Чего бы я ожидал от документация является то, что пользовательский инструмент сборки запускается:

  • Если какой-либо из файлов указан как Выходы пропал, отсутствует
  • Если файл, для которого я указал пользовательский инструмент сборки, был изменен позже, чем любой из существующих файлов, указанных как Выходы
  • Если какой-либо из файлов я указал как Дополнительные зависимости были изменены позже, чем любой из существующих файлов, указанных как Выходы

Но все это независимо от конфигурации, для которой была запущена сборка.

У кого-нибудь есть идея, почему это может произойти? Я проверил, что настройки для пользовательского инструмента сборки идентичны для обеих конфигураций. Выходные файлы создаются в одной папке для обеих конфигураций.

1

Решение

Документация, на которую вы ссылаетесь, в основном правильная, но в ней не говорится, что все, что там есть, в основном соответствует конфигурации проекта / платформе, поскольку она использует tracker.exe, который зависит от файлов .tlog, которые по умолчанию помещаются в промежуточный каталог. Итак, как вы выяснили, использование всех конфигураций в одном и том же месте для файлов tlog должно поддерживать работу трекера и вызывать пользовательский инструмент сборки только при необходимости, независимо от конфигурации / платформы. Я не уверен, что рекомендую что-либо из этого, хотя совместное использование временных объектных файлов может вызвать проблемы позже.

Другой способ справиться с этим — добавить отдельный проект с одной конфигурацией, скажем, «Custom», и выполнить там пользовательскую сборку. Чем ваш текущий проект (ы) зависит от этого проекта, и в Configuration Manager решения отрегулируйте все записи, чтобы каждая конфигурация, которую вы сейчас используете, строит «пользовательскую» конфигурацию для нового проекта.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector