好奇,如果有人知道如何解决这个问题;我有一个特定的.cpp文件,由于某种原因,每当我修改它(甚至只是添加一个空白字符)并构建项目时,都会导致重新编译其他无关的.cpp文件(其中10-20个)。
该文件在任何其他文件中都不是#include(我从不直接#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文件之间看到依赖关系。
答案 0 :(得分:1)
这可能是因为:
更新: *另一个原因是项目中“已添加”的文件不再存在于磁盘上。
要调试此问题,您需要打开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 :(得分:0)
我还没有尝试过,但在类似的问题中找到了一个有趣的建议: VS2010 always thinks project is out of date but nothing has changed