Изменение файла .cpp, заставляющее Visual Studio 2012 перекомпилировать несвязанные файлы

Любопытно, если кто-нибудь знает, как решить эту проблему; У меня есть конкретный файл .cpp, который, по какой-то причине, всякий раз, когда я изменяю его (даже просто добавляя символ пробела) и собираю проект, вызывает перекомпиляцию множества других не связанных файлов .cpp (из них 10-20).

Этот файл не # include’d ни в каких других файлах (я никогда не #include .cpp файлы напрямую, только .h), и нет никаких других зависимостей, о которых я могу думать — мне кажется, что Visual Studio неправильно понимает дерево зависимостей или имеет какое-то поврежденное внутреннее состояние, связанное с процессом сборки. Я попытался удалить каталоги .sdf, .suo, ipch /, .user и объектного файла, но проблема снова появляется через короткое время.

Изменение любого другого файла .cpp вызывает перекомпиляцию только этого файла, как и ожидалось.

Я немного знаю о MSBuild, но ничего не вижу явно в файле .vxproj — рассматриваемый файл .cpp появляется только один раз в группе элементов ClCompile, а его заголовок — только один раз в группе ClInclude.

Если это зазвонит, или если у кого-нибудь есть какие-либо советы о том, как я могу отследить это и устранить неполадки, это будет с благодарностью!

ОБНОВИТЬ:

Я побежал msbuild /verbosity:Detailed но, к сожалению, его объяснение того, почему несвязанные файлы компилируются, столь же непрозрачно:

Using "CL" task from assembly "Microsoft.Build.CppTasks.Common.v110, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "CL"Read Tracking Logs:
Debug\cl.read.1.tlog
Output details (109 of them) were not logged for performance reasons.
{UnrelatedFile1.cpp} will be compiled as {PROBLEM_FILE.CPP} was modified at 4/30/2013 3:28:02 PM.
{UnrelatedFile2.cpp} will be compiled as {PROBLEM_FILE.CPP} was modified at 4/30/2013 3:28:02 PM.
(etc...)

Если это кому-то имеет смысл, дайте мне знать — кажется, не могу найти много информации о внутренней работе задачи CL или о том, почему она увидит зависимость между этими несвязанными файлами CPP.

5

Решение

Это вероятно потому что:

  • его часть другого переводческого блока.
  • другие проекты ссылаются на файл (ы).
  • что-то (возможно, событие предварительной сборки) «касается» файлов, так что компилятор считает, что они изменились.

Обновить:
* Другая причина в том, что в проекте есть «добавленные» файлы, которых больше нет на диске.

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

http://blogs.msdn.com/b/msbuild/archive/2005/09/29/475157.aspx

http://msdn.microsoft.com/en-us/library/vstudio/ms164311.aspx

Например:

msbuild /verbosity:Detailed

Затем msbuild скажет вам, почему он хочет восстановить их.

Редактировать:

Чтобы ответить на ваши изменения о многословии: Подробный вывод, вы можете проверить, какие файлы включены в него, используя ключ / SHOWINCLUDES:

http://msdn.microsoft.com/en-us/library/hdkef6tk(v=vs.80).aspx

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

1

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

Я еще не попробовал это, но нашел интересное предложение в похожем вопросе:
VS2010 всегда думает, что проект устарел, но ничего не изменилось

0

По вопросам рекламы [email protected]