我有一个 C++ 项目,我目前正在从 VS2008 移植到 VS2010。当我构建项目时,Visual Studio 2010 报告构建成功,但如果我随后按 F5 启动调试器,我会被告知项目不是最新的。如果我忽略这个警告,我可以继续调试,但如果我按下 ok,整个项目(数百个源文件)将从头开始重建。输出包含以下内容;
1>------ Build started: Project: SCCW-VC2010, Configuration: Debug Win32 ------
1>Build started 15/11/2010 14:47:40.
1>InitializeBuildStatus:
1> Creating "Debug\SCCW-VC2010.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Midl:
1> All outputs are up-to-date.
1>ClCompile:
1> tinedit.cpp
1> _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1> Automatically linking with sfl504d.lib
1> Automatically linking with ot1104d.lib
1>c:\program files\rogue wave\stingray studio 10.4\include\toolkit\sectndlg.h(134): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\string.h(105) : see declaration of 'strcpy'
1> Automatically linking with og1204d.lib
1> Automatically linking with RWUXThemeD10.lib
1> profile.cpp
1> ZOffsetDialog.cpp
半小时后,一旦构建完成,调试器就会启动。我的猜测是消息
创建“Debug\SCCW-VC2010.unsuccessfulbuild”,因为指定了“AlwaysCreate”。
是问题的一部分,但我无法将其与项目设置联系起来。我 在 google 上找到了一些帮助,但到目前为止没有任何帮助。其他人有这个问题并且知道修复吗?
编辑: 根据 Jalf 在下面评论中的建议,我创建了一个新的项目,将我的所有文件导入到该项目中,并且新项目也有同样的问题。具体来说,我复制了以下所有组;
<ClCompile Include="..\MyDir\MyFile.cpp"/>
<ClInclude Include="..\MyDir\MyFile.h" />
<None Include="res\MyFile.ico" /> (and all similar resources)
<Library Include="..\MyDir\MyFile.lib" />
Edit2: 在浏览完所有标题后,我最终发现 3 不存在。删除它们并在原始项目上进行全部重建似乎已经解决了这个问题。一些提到此问题的博客文章将其称为错误,两天后的浪费时间,我倾向于同意。感谢您提供的答案和评论。
Edit3: 一天后问题又回来了!对项目中的任何文件进行任何编辑都会再次导致完全重建。根据 John Dibling 的回答,该项目确实包含一些静态库,包括 Stingray。我正在放弃 VS2010 并回到 VS2008,因为我有最后期限。有关相关信息,请参阅以下链接;
Visual Studio 2010 总是认为项目已过时,但没有任何改变
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/38c08137-3bb0-4143-b97f-72d077646318
最终编辑 VS2010 SP1 的发布解决了这个问题,现在构建快速高效。
原文由 SmacL 发布,翻译遵循 CC BY-SA 4.0 许可协议
我已经多次遇到这个问题,而且总是令人沮丧。我会告诉你我的问题是什么,但首先我必须问你:
我的问题有点复杂。我有自定义构建规则,将 Stingray 的二进制文件从其源目录(它们所在的位置)复制到我的构建树中的目录。二进制文件被标记为依赖项,以便在每次构建之前复制它们以防它们发生变化。
检查的依赖关系查看这些文件的时间戳以查看它们何时更改。如果
blah.lib
在它的源目录中有一个去年 12 月的 mod 日期,那么当它被复制时,它将具有相同的 mod 日期。检查的依赖关系会注意到“嘿,这个文件很旧,我们必须重建它”,然后它会询问我是否要进行完全重建。有一段时间我只是说“不”,但最终我通过更改自定义构建规则来解决问题,在它完成文件复制后写入一个新的文本文件。这将使新的文本文件成为依赖项,而不是
blah.lib
文件,这让编译器很高兴。