2010-04-21 1 views
4

У меня есть унаследованное приложение C++ с глубоким графиком #includes. Изменения в любом файле заголовка часто вызывают перекомпиляцию, казалось бы, несвязанных исходных файлов.Как определить, какая зависимость приведет к перестройке модуля компиляции C++?

Приложение построено с использованием файла решения Visual Studio 2005 (sln).

Можно ли вызывать MSBUILD таким образом, чтобы он сообщал, какая зависимость (и) вызывает перекомпиляцию исходного файла?

Есть ли другой инструмент, который может помочь?

Примечание: Я ищу только для инструмента, чтобы сказать мне, почему файл бы быть восстановлен, а не какой-то restrospective магии говорил мне, почему это был перестроен.

+0

Я не знаю, как это сделать оптом, но вы можете улучшить положение вещей, убедившись, что заголовки включают только минимальное количество других заголовков (делать это во время рутинных изменений рефакторинга/коды). Иногда это включает разделение заголовков на дополнительные логические компоненты. –

+0

Спасибо, Марк. Есть так много, чтобы исправить, что я хочу сосредоточиться первоначально на наших болевых точках, где инструментарий должен помочь –

ответ

2

Если вы набираете подробное описание или выше (Инструменты> Параметры> Проект> Сборка или/v: подробный), то MSBuild будет регистрироваться, как только он запустит компилятор, точно, какой файл заголовка или исходный файл вызвал его запустите компилятор.

Это то, о чем вы просите?

Dan/MSBuild

+0

это в значительной степени то, о чем я просил. Если я могу также сказать MSBuild, чтобы не запускать компилятор, это было бы лучше. –

0

Возможно, вам потребуется включить Finder (http://www.softpedia.com/progDownload/Include-Finder-Download-83403.html).

+0

Патрик, все ссылки для скачивания Include Finder кажутся сломанными. Есть ли у вас какая-нибудь другая ссылка? –

+0

Вы можете найти его здесь, но я не знаю, сколько он будет использовать: с 2003 года. http://www.codeproject.com/KB/applications/includefinder.aspx – Oscar

+0

Да, просто попробовал проект VS2008, и он даже не запускался. Используя каталоги, он разбился. Ну что ж. – Oscar

1

Утилита называется makedepend. Он доступен на платформах Unix. В окне вы можете найти аналогичный Perl-скрипт here.

Я не думаю, что MSBUILD заботится о зависимости.