Любопытно, если кто-нибудь знает, как решить эту проблему; У меня есть конкретный файл .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.
Это вероятно потому что:
Обновить:
* Другая причина в том, что в проекте есть «добавленные» файлы, которых больше нет на диске.
Чтобы устранить эту проблему, вам нужно включить вывод наивысшего уровня из 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
Я предполагаю, что должна быть какая-то цепочка заголовков, которая вызывает перестройку? Или, возможно, причина кроется в многословии: подробный журнал.
Я еще не попробовал это, но нашел интересное предложение в похожем вопросе:
VS2010 всегда думает, что проект устарел, но ничего не изменилось