当包含文件被更改时,visual studio如何知道要重建哪些cpp文件?

时间:2009-07-08 09:29:38

标签: c++ visual-studio-2005 build include

在我的一些VS 2005项目中,当我更改一个包含文件时,一些cpp文件没有被重建,即使它们中有一个简单的#include行。

这是一个已知的错误,还是对项目有些奇怪?有没有关于VS如何解决依赖关系的信息,我可以查看文件吗?

是的,我确实尝试了一些谷歌搜索,但没有找到任何关于这个。我可能需要正确的搜索词...

6 个答案:

答案 0 :(得分:2)

说实话,我从未遇到过使用Visual Studio的问题。如果CPP包含标题,则应重建CPP。我能提出的唯一原因:相同的包含文件来自2个不同的来源。

您可以尝试通过启用预处理器输出预处理文件来在编译时进行调试。单击CPP文件转到属性,然后转到C / C ++ - >预处理器,并在“生成预处理文件”中选择带或不带行号的项目。

转到您的包含文件将编译指示放在新添加的定义中:

#pragma starting_definition_X
...
#pragma ending_definition_X

现在编译所有内容。将有一个新创建的文件,其名称与CPP相同,但扩展名为.I(或.i)。

如果您的pragma存在,请搜索。如果没有,你的包括来自其他地方。

如果您使用预编译的标头,则cpp应该重建。在MS VC中还有一个pragma once语句,它只解析一次include文件,但是仍然应该重新编译cpp-file。

希望有所帮助,
Ovanes

答案 1 :(得分:2)

我经常遇到这个问题,而且其他IDE也是如此,而不仅仅是VS.似乎他们的内部依赖树有时会与现实脱节。在这些情况下,我发现删除预编译的头文件(这很重要),并且完成重建始终可以解决问题。幸运的是,它不会经常发生。

答案 2 :(得分:1)

您是否启用了"Minimal rebuild"选项?

答案 3 :(得分:0)

Visual Studio比较文件的时间戳。因此,您可能需要检查系统时钟是否设置正确,以及所有文件都没有有趣的时间戳。查看包含文件,cpp文件,pch文件和obj文件,并确保所有时间戳看起来合理。特别是,确保将来都不存在。

答案 4 :(得分:0)

项目中是否添加了.h文件?如果没有,那么vs可能无法找出依赖。

答案 5 :(得分:0)

感谢他们帮助我指出正确方向的所有答案。

我发现删除idb文件并重建将允许后续修改.h文件以生成正确的.cpp文件。然而,这导致整个项目被重建,这让我回到了Neil Butterworth关于进行全面重建的建议。我认为我无能为力。

顺便说一下,看看坏的和好的idb文件,我可以看到没有构建的cpp文件不是坏的idb,而是在好的idb中。在两个文件中都会多次提到正在更改的头文件。

win_pdbx (download)可以提取idb文件,moyix已发布some information这些文件中的流。 流4包含cpp文件的文件路径,但我无法确定格式。