更改.cpp文件导致Visual Studio 2012重新编译不相关的文件

Changing .cpp file causing Visual Studio 2012 to recompile unrelated files

本文关键字:文件 编译 不相关 新编译 2012重 cpp Visual Studio 更改      更新时间:2023-10-16

好奇是否有人知道如何解决这个问题;我有一个特定的.cpp文件,由于某种原因,每当我修改它(甚至只是添加一个空白字符)并构建项目时,都会导致重新编译其他不相关的.cpp文件(其中10-20个)。

这个文件不是#include在任何其他文件中(我从来没有直接#include .cpp文件,只有。h),也没有其他依赖关系,我能想到的-在我看来,Visual Studio误解了依赖关系树,或者有一些腐败的内部状态与它的构建过程有关。我已经尝试删除.sdf, .suo, ipch/, .user和object文件目录,但问题在短时间后再次出现。

如预期的那样,修改任何其他.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:
    Debugcl.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总是认为项目是过时的,但没有什么改变