Visual studio 为什么VisualStudio2008总是重建我的整个项目? 我有一个Visual Studio项目,有大约60个C++源文件。我可以做一个构建,它完成时没有错误。但如果我立即再次点击F7,它总是会重新编译大约50个源文件。它不会重新编译所有的文件,这很奇怪

Visual studio 为什么VisualStudio2008总是重建我的整个项目? 我有一个Visual Studio项目,有大约60个C++源文件。我可以做一个构建,它完成时没有错误。但如果我立即再次点击F7,它总是会重新编译大约50个源文件。它不会重新编译所有的文件,这很奇怪,visual-studio,rebuild,Visual Studio,Rebuild,我已设置“启用最小重建”(/Gm)。你知道为什么会这样吗? 没有一个文件将来有修改的日期。您的文件日期将来有吗?如果更改时区或更改系统时钟时间,则可能会发生这种情况。将来的日期将混淆IDE,并在每次命中F7或F5时强制重新生成。很可能是依赖关系的问题 考虑以下可能性: 如果为解决方案中的某些文件定义了自定义生成工具,请确保“输出”属性包含正确的文件名。如果生成工具的输出与输出文件名中指定的输出不一致,则生成器将重新生成该文件 如果有自定义生成事件,请检查这些生成事件的输出是否不影响要生成的文件

我已设置“启用最小重建”(/Gm)。你知道为什么会这样吗?
没有一个文件将来有修改的日期。

您的文件日期将来有吗?如果更改时区或更改系统时钟时间,则可能会发生这种情况。将来的日期将混淆IDE,并在每次命中F7或F5时强制重新生成。

很可能是依赖关系的问题

考虑以下可能性:

  • 如果为解决方案中的某些文件定义了自定义生成工具,请确保“输出”属性包含正确的文件名。如果生成工具的输出与输出文件名中指定的输出不一致,则生成器将重新生成该文件

  • 如果有自定义生成事件,请检查这些生成事件的输出是否不影响要生成的文件的依赖关系

  • 我在构建后尝试将一些输出文件复制或移动到构建文件夹时遇到问题。影响生成过程输出文件时间戳的生成后操作将决定每次的重建


一个原因是,如果将某个源文件的“上次修改日期”设置为将来的某个日期:它将重建,然后源文件仍然晚于可执行文件


如果源文件位于远程计算机(网络共享)的目录中,则可能会发生此日期问题,并且/或者,如果您的计算机的时间与运行源版本控制系统服务器的计算机的日期不同步,甚至可能会发生此问题。

我也有同样的问题,这似乎是因为我关闭了浏览信息功能。属性->C/C++->浏览信息->启用浏览信息->无。我找到的唯一解决办法就是重新打开它。这是一个Xbox360项目,fwiw,我的其他项目没有这个问题

这个问题似乎有很多原因,但对我来说,解决这个问题的方法是:

  • 关闭Visual Studio
  • 手动删除所有
    bin
    obj
    文件夹(Clean似乎不起作用)
  • 打开解决方案并干净地运行(我不确定这是否必要,但我这样做只是为了以防万一…)
  • 像平常一样的建筑

  • 注意:这是针对Visual Studio 2010中的一个C#程序。

    导致我出现类似症状的原因是:
    我在一个解决方案中有几个项目。有.cpp文件被>1个项目引用(因此编译)。不幸的是,VisualStudio用一个非常简单的命名创建.obj文件-它只是将“.cpp”替换为“.obj”。使用不同的名称创建wrapper.cpp-s解决了这个问题。

    我也有类似的想法。尽管我确实有构建前和构建后事件,但它们并没有引起问题。事实证明,我在参考链上有许多项目,其中的内容文件被标记为“始终复制”,而不是“更新时复制”,这意味着这些项目总是被认为“过时”。通过将所有这些更改为“如果更新,则复制”,对我的单元测试项目的更改不再强制重新编译所有其他项目。

    在我的情况下(通过VS2005的C++),它只是在发布配置上,Studio在生成输出中告知,如果未设置/Zi-选项,编译器选项/Gm将被忽略。设置后/Zi通过

    配置属性->C/C++->常规->调试信息格式:程序数据库(/Zi)


    还好。但是,当发布配置需要一些调试方面的东西时,难道没有什么问题吗?我还不清楚

    在谷歌搜索了几天后,我终于找到了解决问题的办法

    当我把我的项目移到一台新电脑上时,我遇到了这个问题。我多次检查了文件的创建日期。这些日期是最新的,但是修改日期是最新的(有点奇怪),即使我更改了文件


    文件的简单更新解决了问题。

    检查您的项目是否包含磁盘上不存在的任何.h头文件。当我删除一个实际上没有包含在任何地方的头文件时,我总是会遇到这种情况,但忘记从VS中的解决方案导航器中删除它。注意:在构建过程中(当没有包含在任何地方时),缺少头文件不会产生错误。

    请检查项目的程序数据库文件名设置。出于某种原因,如果将其设置为目录名(如
    “$(IntDir)\”
    ),则有时会导致VS每次都重建项目,即使您没有生成PDB文件(即调试信息格式设置为“禁用”)

    这是VS2008中的一个bug;我还没有在VS2010中复制它,但是我的测试还没有完成,所以我不敢肯定VS2010中没有这种行为。

    禁用“最小重建”(配置属性>C/C++>代码生成)为我修复了它。编译器甚至留下了一条线索:

    1> cl:命令行警告D9007:“/Gm”需要“/Zi或/Zi”;选项被忽略


    尽管我必须指出,编译器并没有像上面所说的那样忽略这个选项。

    我已经解决了同样的问题

    在我的例子中,编译器显示警告,如果指定了/Gm,则需要/Zi选项

    /Gm启用“最小重建”,这需要.pdb文件中的调试信息。因此,如果您不想使用.pdb,请同时禁用最小重建-这解决了我的问题。

    项目属性->“C/C++”->“输出文件”->“程序数据库文件名”选项不应为空。通过从下拉框中选择来设置此选项。将设置该选项