项目已损坏? :.cpp在编辑相关头文件后不会自动重新编译

时间:2017-01-19 05:13:30

标签: c++ visual-studio-2015

为简单起见,我有一个项目,其中的类/文件可以分为两组BC
C通常取决于(#include)一些B 让我们说C1C2,...和C5取决于B1,这里没什么特别的: -

B1.h

class B1{/** some code */}; 

B1.cpp

#include "B1.h"
/** some code  */

C1.h

class C1{/** some code  */};

C1.cpp

#include "C1.h"
#include "B1.h"
/** some code  */

C2.h

class C2{/** some code  */};

C2.cpp

#include "C2.h"
#include "B1.h"
/** some code  */

问题

当我修改B1.h并按 F5 时,应重新编译C1.cppC2.cpp
但在我的情况下,它不是 - VS仅重新编译C1.cpp

我必须重建整个项目以间接强制重新编译C2.cpp,否则会出现此错误: -

  

在d:...... \ B1.h中找到了B1.h的副本,   但是当前的源代码与内置的版本不同   d:... \ B1.h

注意:两个地点d:\...\B1.h完全相同。

经过数月的编码,这个问题昨天刚好发生在我身上 在详尽的错误搜索之后,问题仅针对此特定文件(B1.h)发生 其他Bi都可以。

我尝试了什么

(类似于this question的答案)

  • 删除bin文件夹中的所有内容(包括调试和发布) - #X文件夹(见下文)
  • 清洁项目&重建(这只是一次性治疗。)
  • 重构(自动重命名)B1到别的东西(也是文件名)
  • 删除文件,创建新文件B1.h,然后从旧B1.h复制源代码。
  • 多次重启我的电脑
  • 删除Visual Studio的Temp文件夹(%Temp%
  • 中的所有内容
  • 删除与我的项目相关的所有.suo.user.ncb.sbr.log.sdf.pdb
  • 确保C2.cpp的{​​{1}}时间和系统时间正确无误。
  • 修改)确保date modified不包含属于我的项目的任何文件,例如stdafx.hB以及直接包含CB(in)的其他人。
  • 修改)确保C不是stdafx.h - 由任何文件编辑,但项目设置除外。
    感谢 Ari0nhh user975989 TripeHound
  • 修改)确保在完全重建时,#include确实包含C2.cpp(请查看B1.h的控制台)。
  • 编辑)修复VS2015无济于事。
  • 编辑)卸载大多数VS2015扩展程序无济于事。

线索1

如果我修改show include(例如添加空格字符),然后保存并构建,C2.cpp链接C2.cpp

现在,如果我编辑B1.h并按 F5 B1.h现在将自动重新编译(正确)。
这不是一种治疗方法,因为除了C2.cpp之外我还有很多想要链接 C2的人。 ......而且非常可疑 ...在我更改了一些项目设置(不确定哪个)后,B1.h不再链接。

线索2

删除/重新创建新文件 C2.cpp
此解决方案可以解决问题,但如果我重新启动计算机,效果将会消失。

问题

  • 如何修复项目以使自动重新编译过程再次正确?
    更具体地说,我正在寻找某种" 最终清洁/修复这个项目"按钮。
  • (次要问题)问题的原因是什么?

很难确定原因,因此欢迎部分答案或不确定的猜测。

一些进展

一天后,它最终正确地重新编译B1.h - 即使在计算机重启后也是如此。

我仍然不确定我采取了哪些措施来修复它。

然而,这是我的猜测,以防它可能对某人有用。

我的项目文件结构如下: -

C2.cpp

我删除了F/ F/Debug/ <--#X contains .exe,.exp,.ilk,.lib,.pdb; one file per type F/Release/ F/F/ <-- contains all my .cpp,.h; F/F/Debug/ <--#Y contains many .obj of my own code, .pch, .log, .tlog F/F/Release/ 中的所有内容,但未删除#X 删除#Y中的所有.obj可能是解决问题的操作。

我将不得不进行更多测试,看看这种方法有多可靠...... 请注意,上述所有问题仍然没有答案。

0 个答案:

没有答案