Visual Studio有时会忽略间接构建依赖关系,其中类定义中的更改应触发.cpp
文件中的重建,该文件通过两个间接包含依赖于它。
现在的问题是:这是一个错误还是这是预期的? Visual Studio究竟是如何确定目标文件是否是最新的?
为了说明问题,这里是设置的细分。
项目A.h
中的文件ProjectA
:
class A
{
virtual void x() = 0;
};
B.h
中的文件ProjectB
:
#include "A.h"
class B : public A
{
virtual void y() = 0;
};
C.h
中的文件ProjectC
:
#include "B.h"
class C : public B
{
void x() override;
void y() override;
};
并在文件C.cpp
中:
#include "C.h"
void C::x() {}
void C::y() {}
最后,C在D.cpp
:
#include "C.h"
void somefunction()
{
auto p = make_shared<C>();
}
现在我将方法virtual void z() = 0;
添加到类A
,这应该会导致重新编译C.cpp
并导致D.cpp
失败,因为缺少z()
的实施。但偶尔,Visual Studio告诉我所有内容都是最新的,A.h
中的任何更改都不会触发D.cpp
的重新编译,这会导致对重建过程中的程序失败进行冗长的搜索,之后所有程序都会起作用再次预料到了。
要清楚,在添加z()
之前进行重建,更改A.h
的时间戳会触发预期的,恕我直言的正确行为。我不能心甘情愿地复制。