繁体   English   中英

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

[英]How does visual studio know which cpp files to rebuild when an include file is changed?

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

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

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

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

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

转到你的包含文件将pragma放在新添加的定义周围,如:

#pragma starting_definition_X
...
#pragma ending_definition_X

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

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

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

希望有所帮助,
Ovanes

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

您是否打开了“最小重建”选项?

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

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

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

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

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

win_pdbx (下载)可以提取idb文件,moyix已经发布了一些关于这些文件中的流的信息 流4包含cpp文件的文件路径,但我无法确定格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM