更改.cpp文件导致Visual Studio 2012重新编译不相关的文件
Changing .cpp file causing Visual Studio 2012 to recompile unrelated files
好奇是否有人知道如何解决这个问题;我有一个特定的.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总是认为项目是过时的,但没有什么改变
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 无论如何可以将webm / mp4文件编译/记忆为.exe程序吗?(C++)
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发布版本
- Arduino IDE中自定义库类的.h文件编译错误的原因是什么
- makefile和错误将与大型项目分开的文件编译
- 如何使用生成文件编译具有多个目录的 c++ 项目
- 我可以将Visual Studio 2015头文件编译成dll并在VS2013中使用它吗?
- 使用Bazel将C 文件编译为python.h
- 使用 .a 文件编译简单的C++文件
- OpenCV 3.2 文件编译
- 如何从多个 cpp 文件编译 WebAssembly
- 从多个文件编译可以"undefined reference"
- 使用静态依赖性为共享二进制文件编译语法需要更加清晰
- 将Gsoap Src文件编译到我的项目中
- 如何用多个文件编译make下的dlib
- 字段的类型不完整,从多个文件编译
- 强制将特定文件编译为Objective-C/文件类型,但将整个项目编译为Objective C++
- OpenGLES 标头(包括 Availability.h)可防止 CPP 文件编译