Sma*_*acL 19 c++ build visual-studio-2010
我有一个C++项目,我目前正在从VS2008移植到VS2010.当我构建项目时,Visual Studio 2010报告构建成功,但如果我按F5启动调试器,我被告知该项目不是最新的.如果我忽略这个警告,我可以继续调试好,但是如果我按下确定,整个项目(数百个源文件)将从头开始重建.输出包含以下内容;
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
Run Code Online (Sandbox Code Playgroud)
半小时后,一旦构建完成,调试器就会启动.我猜是这个消息
创建"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" />
Run Code Online (Sandbox Code Playgroud)
编辑2: 经过所有标题包括我最终发现3不存在.删除它们并在原始项目上进行重建似乎已经解决了问题.一些提到这个问题的博客文章将其称为一个错误,以及两天后来失去的时间,我倾向于同意.感谢您提供的答案和评论.
编辑3: 一天后问题又回来了!对项目中的任何文件进行任何编辑都会再次导致完全重建.根据John Dibling的回答,该项目确实包含一些静态库,包括Stingray.我正在放弃VS2010并回到VS2008,因为我有最后期限.有关相关信息,请参阅以下链接;
http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/38c08137-3bb0-4143-b97f-72d077646318
http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx
最终编辑 VS2010 SP1的发布解决了这个问题,现在构建速度快,效率高.
小智 13
在输出窗口中查看要重建的文件
转到菜单Tools- > Options,然后导航到Project and Solutions- > Build and Run.将选项更改MSBuild Project build output verbosity为:
Diagnostic
Run Code Online (Sandbox Code Playgroud)建立,得到长日志
在日志中查找文件(从1开始),读取诊断.您可能会找到例如标题名称,该名称将来有日期或不存在.
我多次遇到过这个问题而且总是令人沮丧.我会告诉你我的问题是什么,但首先我要问你:
我的问题有点复杂.我有自定义构建规则,将Stingray的二进制文件从其源目录(它们所在的位置)复制到构建树中的目录.二进制文件被标记为依赖项,因此在每次构建之前复制它们以防它们发生更改.
检查的依赖性查看了这些文件的时间戳,以查看它们何时被更改.如果blah.lib在其源目录中有一个去年12月的mod日期,那么当它被复制时,它将具有相同的mod日期.检查的依赖性会注意到"嘿这个文件很旧,我们必须重建它",然后它会问我是否想要完全重建.
有一段时间我只是说"不",但最终我通过更改自定义构建规则来修复问题,以便在执行文件复制后写入新的文本文件.这将使新文本文件成为依赖,而不是blah.lib文件,并使编译器感到高兴.