【问题标题】:Why is Visual Studio 2008 always rebuilding my whole project?为什么 Visual Studio 2008 总是重建我的整个项目?
【发布时间】:2010-11-04 13:58:01
【问题描述】:

我有一个包含大约 60 个 C++ 源文件的 Visual Studio 项目。我可以进行构建,并且它可以毫无错误地完成。但是如果我立即再次按 F7,它总是会重新编译大约 50 个源文件。它不会重新编译所有文件,这很奇怪。

我设置了“启用最小重建”(/Gm)。任何想法为什么它可能会这样做? 所有文件都没有未来的修改日期。

【问题讨论】:

  • 对不起。它主要是 C++,也有一些 C。
  • 如果您执行“解决方案/清理”和/或“全部重建”,问题会消失吗?如果您关闭“启用最小重建”选项,它会消失吗?
  • 我尝试清理并重建所有内容,但它仍然会发生。没有尝试禁用最小重建。然而,今天早上它似乎表现得很好!
  • FWIW 过去曾出现过“增量链接”等功能的问题;所以我关掉了这些,专注于其他方法来减少构建时间。
  • “其他方式”,例如 stackoverflow.com/questions/1014632/… 和 Lakos 书​​中所述。

标签: visual-studio rebuild


【解决方案1】:

Project Properties -> "C/C++" -> "Output Files" -> "Program Database File Name" 选项不能为空。通过从下拉框中选择来设置此选项。该选项将设置如下:$(IntDir)\vc90.pdb。并且行 ProgramDataBaseFileName="" 将从 vcproj 文件中删除。

然后,当您构建项目或解决方案时,只会重新编译更改的 *.cpp 文件。

【讨论】:

    【解决方案2】:

    项目重建存在类似问题。 Visual Studio 不会重新编译,但每次按 F7 时都会重新链接项目。

    修复很简单。尝试在编辑器中打开项目中包含的所有文件(从解决方案资源管理器中双击每个文件)并从解决方案中删除那些不存在的文件。

    【讨论】:

      【解决方案3】:

      遇到了同样的问题。解决者: -删除输出文件夹(obj、exe、所有文件) -运行cygwin -cd 项目文件夹 -run "touch *", 重置文件修改日期/时间 -构建并享受已修复的问题

      【讨论】:

        【解决方案4】:

        我们经常在这里:

        • 手动删除所有中间和输出文件。 vstudio 中的 clean 选项有时是不够的。从一个全新的开始做完整的构建。如果在完整构建后 vstudio 仍想重新编译某些文件,则可能与下一个项目符号有关。
        • 如果在您的 vcxproj 中引用了一个不在磁盘上的头文件,该项目也会重新编译。您可以通过 MSDN 博客上描述的一些隐藏功能来检查这一点,或者只需触摸(即单击以打开)项目爆炸器中的所有头文件,看看磁盘上是否不存在一个

        【讨论】:

          【解决方案5】:

          在我的情况下,我将系统数据时间更改为上一个日期,因此每次都在重建,因为文件的时间戳不同,一旦更改为当前时间,它不会每次都重建。

          【讨论】:

            【解决方案6】:

            我已经解决了同样的问题。

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

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

            【讨论】:

              【解决方案7】:

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

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

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

              【讨论】:

                【解决方案8】:

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

                这是 VS2008 中的一个错误;我还没有在 VS2010 中重现它,但我的测试还不够彻底,所以我不敢说 VS2010 中不存在这种行为。

                【讨论】:

                  【解决方案9】:

                  我遇到了同样的问题,似乎是因为我关闭了浏览信息。属性->C/C++->浏览信息->启用浏览信息->无。我发现的唯一解决方法是重新打开它。这是一个 xbox 360 项目,fwiw,我的其他项目没有问题。

                  【讨论】:

                    【解决方案10】:

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

                    【讨论】:

                      【解决方案11】:

                      经过几天的谷歌搜索,我最终找到了解决问题的方法。

                      我在将项目移至新 PC 时遇到了这个问题。我已经检查了几次文件的创建日期。这些日期是最新的,但是即使我更改了文件,修改日期也很糟糕(有点奇怪)。

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

                      【讨论】:

                        【解决方案12】:

                        在我的这种效果(通过 VS2005 的 C++)的情况下,它仅在发布配置中,并且 Studio 在构建输出中告知,如果 /Zi - 选项未设置,则编译器选项 /Gm 将被忽略。通过

                        设置 /Zi 后

                        Configuration Properties -> C/C++ -> General -> Debug Information Format : Program Database (/Zi) ,

                        没关系。但是当发布配置需要一些关于调试的东西时,有什么问题吗?我还不清楚!

                        【讨论】:

                        • 这到底是我的问题,我一定是不小心关闭了我发布项目的调试信息(/Zi)——显然它是在构建过程中用来决定需要构建什么的!跨度>
                        • 看起来您需要为 ProgramDatabase 名称提供一个空字符串,或者您必须生成数据库。将构建输出设置为诊断级别,您可以看到以下消息:Task "Delete" skipped, due to false condition; ...('ProgramDatabase' != '' and 'ProgramDatabase' != 'OldStyle' and 'ARM\Release\vc110.pdb' != '' and !Exists(ARM\Release\vc110.pdb))。跨度>
                        【解决方案13】:

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

                        【讨论】:

                          【解决方案14】:

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

                          【讨论】:

                            【解决方案15】:

                            似乎这个问题可能是由很多事情引起的,但为我解决的问题是:

                            1. 关闭 Visual Studio
                            2. 手动删除所有 binobj 文件夹(清理似乎没用)
                            3. 打开解决方案并运行 Clean(我不确定这是否有必要,但我这样做是为了以防万一...)
                            4. 正常建设

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

                            【讨论】:

                              【解决方案16】:

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

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

                              【讨论】:

                              • 未来没有任何源文件。所有文件都在我的本地机器上。
                              【解决方案17】:

                              很可能是依赖问题。

                              考虑以下可能性:

                              • 如果您为解决方案中的某些文件定义了自定义构建工具,请确保输出属性包含正确的文件名。如果构建工具的输出与输出文件名中指定的不对应,构建器将重新构建该文件。

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

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

                              【讨论】:

                              • 我没有自定义构建事件。一切都只是正常的编译和链接,带有库。
                              【解决方案18】:

                              您的任何文件日期都在未来吗?如果您更改了时区或更改了系统时钟时间,就会发生这种情况。未来的日期会混淆 IDE 并在每次按下 F7 或 F5 时强制重新构建。

                              【讨论】:

                              • 未来没有任何源文件。我检查了所有文件。
                              • 这种情况一直发生在我身上。仔细检查您的文件日期,包括来自外部来源的标题!
                              • 这种情况发生在我身上很多次了,但从来没有发生过。
                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多