2013-10-25 38 views
3

我在C++ VS2010中构建了一个DLL。VS 2010建设不消耗

我已经通过添加“d”来更改DEBUG TargetName的值,因此“TargetName”的定义现在是“$(ProjectName)d”。

所有的构建都很好 - 所有的DEBUG构建文件名都有一个后缀“d” - 这是因为调试&版本文件可以存在于一个目录中(该项目是一大批项目的一小部分)。

但是,当我按F7与一个DEBUG目标时,项目总是建立。例如,让我说我的项目被称为“MyProj”。在RELEASE中,我在DEBUG的“MyProjd.dll”中生成“MyProj.dll”和所有其他文件(MyProj.lib/.exp/.pdb/...)等等。所有这些文件在它们各自目录,但VS总是建立在F7的DEBUG上。在RELEASE中,VS正确地确定项目是最新的并且什么都不做。

所以我启用VS中的调试跟踪使用<system.diagnostics>在devenv.exe.config中设置CPS = 4并重新启动VS.使用(sysinternals)DebugView我可以看到DEBUG重建被触发,因为VS正在检查“MyProj.lib”&“MyProj.exp”而不是“MyProjd.lib”&“MyProjd.exp”,即它检查错误文件(不存在),所以构建始终启动。

这是一个已知问题还是有一些设置来解决这个问题?设置/ IMPLIB根本没有帮助 - 这似乎是在VS的“make”方面的问题 - 正确的文件总是被建立(如果不必要!),所以这是一个烦恼,而不是一个主要问题...

感谢

尼克

+1

我以前也见过这种行为。我记得必须做一个“干净的”,关闭VS,删除预编译的头文件和输出文件夹,然后重建所有内容。 – mark

+0

有趣 - 我清理了这个项目,问题没有了。很奇怪。 FWIW,我根本没有使用PCH。仍然认为这是VS依赖检查中的一个(微小的恼人的)错误... – Nicko

+0

我怀疑当你做一个干净的时候,VS会清除它的依赖列表。由于我在向TargetName中添加“d”之后没有做过清理工作,因此VS错误地仍然在寻找旧名称(但仅限于.lib和.exp文件),而不是查看$(TargetName )宏。 做一个“干净的”重置依赖项,所以现在一切都很好。我仍然认为这是一个bug ... – Nicko

回答

0

我以前见过这种行为也是如此。不知道这是必要的一步,但我的决心:

  • 建设 - >“清理解决方案”
  • 退出Visual Studio的
  • 删除预编译的头文件和输出文件夹(认为我删除了。 sdf)
  • 重建一切