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

问题描述:

好奇,如果有人知道如何解决此问题;我有一个特殊的.cpp文件,出于某种原因,每当我修改它(甚至只是添加一个空格字符)并构建项目时,都会导致重新编译大量其他无关的.cpp文件(其中10-20个)。更改导致Visual Studio 2012重新编译无关文件的.cpp文件

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

修改任何其他.cpp文件只会导致重新编译该文件,如预期的那样。

我知道一些关于MSBuild的知识,但在.vxproj文件中没有看到任何明显的错误 - 所涉及的.cpp文件只在ClCompile项目组中出现一次,并且其头文件只在ClInclude组中出现一次。

如果这个响铃,或者如果有人有任何提示,我可能会去跟踪和解决它,它将不胜感激!

UPDATE:

我跑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文件之间的依赖关系。

+0

更新我的回答您进行修改,希望它帮助! – paulm 2013-05-01 17:59:58

+0

谢谢 - 还没有机会尝试它,有一天放弃了它 - 但会很快再次刺伤它。不要以为它是一个标题链 - 我在解决方案中搜索了每个文件(甚至是二进制文件)以查找有问题的文件名,没有引用我还没有意识到。 – QuadrupleA 2013-05-02 20:51:45

+0

也可能是一个预编译头部问题,具体取决于包含哪里。 – paulm 2013-05-03 07:46:14

这可能是因为:

  • 它的另一个翻译单元的一部分。
  • 其他项目引用文件。
  • 某些东西(可能是预构建事件)会“触摸”文件,以便编译器认为它们已经更改。

更新: *另一个原因是,如果项目有文件“补充说:”这是在磁盘上不再。

要调试这个问题,你需要打开MSBuild中的最高水平out输出:

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

我认为必须有一些头链,导致重建?或者也许原因在于详细程度:详细日志。

+0

该冗长的选项是一个好主意 - 将试一试,看看它是否对任何事情有所了解。 – QuadrupleA 2013-04-30 22:09:09

+0

放弃这个 - 最终只是将文件重命名为其他东西,似乎已经解决了这个问题。我想原来的名字是闹鬼的。我会将其标记为答案。 – QuadrupleA 2013-05-08 07:42:57

+0

嗯文件名是什么? – paulm 2013-05-08 09:05:42

我还没有尝试了这一点,但在类似的问题发现了一个有趣的建议: VS2010 always thinks project is out of date but nothing has changed