VS 2005未 检测到C ++项目的头文件中的更改

问题描述 投票:4回答:3

很多时候,实际上大多数情况下,Visual Studio2005都没有检测到某些CPP文件C ++项目中包含的某些标题被更改了。因此,如果仅更改标头,则不会重新编译项目。

它不依赖于“预编译头”设置。它不会发生在VS 2006中,但在每个版本的VS 2005和VS 2008中都会发生。它适用于所有项目,而不是某些特定项目。

如果头文件是项目的一部分,即它出现在vcproj文件中,则不会发生这种情况

解决问题的唯一方法是执行干净的构建。

任何建议都非常感谢。

visual-studio visual-c++ visual-studio-2005 header-files
3个回答
3
投票

大多数情况下(特别是在C项目中),这是因为“启用最小重建”项目设置。在“最小重建”模式下,VS2005尝试对需要重建的内容做出更精确的决策:不是基于哪些头文件被修改,而是基于修改了哪些单独的类定义。在C项目中(与C ++项目相反),这种方法基本上在100%的时间内失败,即它完全忽略修改的头文件而从不重建任何东西。很烦人。我不知道你正在构建什么样的项目,但也许它可能在C ++项目中失败。

无论如何,尝试将“启用最小重建”设置为“否”。 (这是项目设置,BTW,而不是全局VS设置)。这应该将VS恢复为传统的基于文件的重建行为。


2
投票

首先,VS仅检查属于项目一部分的标头(包含在项目文件/文件树的一部分中)。

有一些头文件以非常特殊的方式处理,例如resource.h。此文件的开头有一个注释标记,用于将文件定义为非依赖项。在这里看看我的other question about that issue

如果你使用最小重建编译器选项(/ Gm,如果我没记错的话),VS还会缓存类依赖项(哪个类在什么标题中声明,哪个cpp使用什么标题等)。有关详细信息,请参阅此MSDN page on /Gm compiler setting

最小重建依赖于不在包含文件之间更改的类定义。类定义对于项目必须是全局的(应该只有给定类的一个定义),因为.idb文件中的依赖关系信息是为整个项目创建的。如果项目中的类有多个定义,请禁用最小重建。

此外,如果您使用强制包含项目设置,我不确定是否正确解析了依赖项...

希望有任何用处。


0
投票

我刚遇到这个问题 - 结果我复制了一个VS Project文件夹(非常糟糕的主意)并继续处理我的项目副本。但由于所有包含路径等仍然指向原始项目(使用绝对路径的愚蠢VS ...),VS“没有检测到”标题更改,换句话说,正在查看错误的包含位置。

© www.soinside.com 2019 - 2024. All rights reserved.