Visual studio VS2005没有';t检测C+的头文件中的更改+;项目

Visual studio VS2005没有';t检测C+的头文件中的更改+;项目,visual-studio,visual-c++,visual-studio-2005,header-files,Visual Studio,Visual C++,Visual Studio 2005,Header Files,很多时候,实际上大多数时候,视觉研究2005并没有检测到 某些CPP文件C++项目中包含的某些报头发生了更改。 因此,如果只更改了头,它不会重新编译项目 它不依赖于“预编译头”设置。 它不会发生在VS 2006中,但在VS 2005和VS 2008的每个版本中都会发生。 它适用于所有的项目,而不是某个特定的项目 如果头文件是项目的一部分,则不会发生这种情况, i、 e.如果它出现在vcproj文件中 解决此问题的唯一方法是执行干净的构建 非常感谢您的建议。首先,VS只检查属于您的项目(包括在项目

很多时候,实际上大多数时候,视觉研究2005并没有检测到 某些CPP文件C++项目中包含的某些报头发生了更改。 因此,如果只更改了头,它不会重新编译项目

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

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

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


非常感谢您的建议。

首先,VS只检查属于您的项目(包括在项目文件/文件树的一部分)的标题

有些头文件是以非常特殊的方式处理的,例如
resource.h
。此文件的开头有一个注释标记,该标记将文件定义为非从属文件。看到我的名字了吗

如果使用最小重建编译器选项(/Gm,如果我没记错的话),VS还会缓存类依赖项(哪个类在哪个头中声明,哪个cpp使用哪个头,等等)。如需有关更多详细信息,请参阅此:

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

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

希望这是有用的。

大多数情况下(尤其是在C项目中),这种情况发生是因为“启用最小重建”项目设置。在“最小重建”模式下,VS2005尝试对需要重建的内容做出更精确的决定:不是基于修改了哪些头文件,而是基于修改了哪些单独的类定义。在C项目中(与C++的项目相反),这种方法基本上不满足100%的时间,即完全忽略修改的头文件,并且从不重建任何东西。很烦人。我不知道你在建什么样的项目,但是它也可能在C++项目中失败。
无论如何,请尝试将“启用最小重建”设置为“否”。(顺便说一句,这是一个项目设置,不是全局VS设置)。这将使VS恢复到传统的基于文件的重建行为。

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

对于那些仍然存在VS 2015、2017和2019问题的人(可能还有更多版本)并尝试关闭预编译头、创建全新的解决方案/项目(不复制任何内容)、禁用最小重建等等。并且只需要一个有效的解决方案,而不意味着在每次测试运行之前都要进行清理或手动重建

您可以使用蛮力进行修复:

转到项目属性

“自定义生成步骤”

“在之前执行”并设置为“清除”


我想知道我和其他人因为不知道VS实际上只是运行旧版本的代码而忘记了多少东西,而没有实际修复代码的更改?

最小重建被禁用-我只是仔细检查了一下。一定是别的原因。谢谢。“首先,VS只检查那些属于您的项目(包括在项目文件/文件树的一部分)的标题”-这是不正确的,抱歉。VS观察所有头文件,即使它们不是项目的一部分,但包含在某些cpp文件中。已禁用最小重建。一定是别的原因。它不是资源头文件,而是计划头文件。对于最小重建/GM,我发现[ Visual C++团队成员]启发:“……C++使用M/GM功能的最小重建多年来一直没有积极开发”