为简单起见,我有一个项目,其中的类/文件可以分为两组B
和C
。
C
通常取决于(#include
)一些B
让我们说C1
,C2
,...和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.cpp
和C2.cpp
。
但在我的情况下,它不是 - VS仅重新编译C1.cpp
。
我必须重建整个项目以间接强制重新编译C2.cpp
,否则会出现此错误: -
在d:...... \ B1.h中找到了B1.h的副本, 但是当前的源代码与内置的版本不同 d:... \ B1.h
注意:两个地点d:\...\B1.h
完全相同。
经过数月的编码,这个问题昨天刚好发生在我身上
在详尽的错误搜索之后,问题仅针对此特定文件(B1.h
)发生
其他Bi
都可以。
(类似于this question的答案)
#X
文件夹(见下文)B1
到别的东西(也是文件名)B1.h
,然后从旧B1.h
复制源代码。 %Temp%
).suo
,.user
,.ncb
,.sbr
,.log
,.sdf
,.pdb
C2.cpp
的{{1}}时间和系统时间正确无误。date modified
不包含属于我的项目的任何文件,例如stdafx.h
,B
以及直接包含C
或B
(in)的其他人。C
不是stdafx.h
- 由任何文件编辑,但项目设置除外。#include
确实包含C2.cpp
(请查看B1.h
的控制台)。如果我修改show include
(例如添加空格字符),然后保存并构建,C2.cpp
将链接到C2.cpp
。
现在,如果我编辑B1.h
并按 F5 ,B1.h
现在将自动重新编译(正确)。
这不是一种治疗方法,因为除了C2.cpp
之外我还有很多想要链接 C2
的人。
......而且非常可疑
...在我更改了一些项目设置(不确定哪个)后,B1.h
不再链接。
删除/重新创建新文件 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
可能是解决问题的操作。
我将不得不进行更多测试,看看这种方法有多可靠...... 请注意,上述所有问题仍然没有答案。