【问题标题】:VS 2005 doesn't detect changes in header files of C++ projectVS 2005 没有检测到 C++ 项目头文件的变化
【发布时间】:2010-12-08 17:01:12
【问题描述】:

很多时候,实际上大多数时候,Visual Studio2005 检测不到 某些 CPP 文件 C++ 项目中包含的某些标头已更改。 因此,如果只更改标题,它不会重新编译项目。

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

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

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

非常感谢任何建议。

【问题讨论】:

    标签: visual-studio visual-c++ visual-studio-2005 header-files


    【解决方案1】:

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

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

    【讨论】:

    • 最小重建被禁用 - 我只是仔细检查了。它一定是别的东西。谢谢。
    【解决方案2】:

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

    有些头文件以非常特殊的方式处理,例如resource.h。该文件在其开头有一个注释标记,将文件定义为非相关文件。请在此处查看我的other question about that issue

    如果你使用 minimal rebuild 编译器选项(如果我没记错的话,/Gm),VS 还会缓存类依赖项(哪个类在哪个头文件中声明,哪个 cpp 使用哪个头文件等) .有关更多详细信息,请参阅此MSDN page on /Gm compiler setting

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

    另外,如果您使用 force include 项目设置,我不确定是否正确解决了依赖关系...

    希望对你有用。

    【讨论】:

    • “首先VS只检查那些属于你项目的头文件(包含在项目文件/文件树的一部分中)” -----这是不正确的,对不起。 VS 观察所有头文件,即使它们不是项目的一部分但包含在某些 cpp 文件中。最小重建被禁用。它一定是别的东西。它不是资源头,而是计划头文件。谢谢
    • 关于 Minimal Rebuild /Gm,我发现 [developercommunity.visualstudio.com/comments/189247/… Visual C++ 团队成员的帖子)很有启发性:“....C++ MinimalRebuild using /Gm 功能多年来一直没有被积极开发”
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      对于我们这些在 vs 2015、2017 和 2019(可能还有更多版本)中仍然存在此问题并尝试关闭预编译头文件、创建全新解决方案/项目(不复制任何内容)、禁用最小重建和很快。并且只需要一个有效的解决方案,并不意味着在每次测试运行之前手动运行干净或重新构建。

      您可以通过蛮力修复:

      转到项目属性

      “自定义构建步骤”

      “之前执行”并设置为“干净”

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

      【讨论】:

        猜你喜欢
        • 2014-03-12
        • 1970-01-01
        • 1970-01-01
        • 2011-12-03
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        • 2020-02-24
        • 2021-07-20
        相关资源
        最近更新 更多