间接包括在Visual Studio Build中未解析的依赖项

时间:2015-12-03 17:00:04

标签: c++ visual-studio visual-studio-2012 msbuild

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的时间戳会触发预期的,恕我直言的正确行为。我不能心甘情愿地复制。

0 个答案:

没有答案