我有一个包含大约 60 个 C++ 源文件的 Visual Studio 项目。我可以进行构建,并且它可以毫无错误地完成。但是如果我立即再次按 F7,它总是会重新编译大约 50 个源文件。它不会重新编译所有文件,这很奇怪。
我设置了“启用最小重建”(/Gm)。任何想法为什么它可能会这样做?这些文件都没有未来的修改日期。
我有一个包含大约 60 个 C++ 源文件的 Visual Studio 项目。我可以进行构建,并且它可以毫无错误地完成。但是如果我立即再次按 F7,它总是会重新编译大约 50 个源文件。它不会重新编译所有文件,这很奇怪。
我设置了“启用最小重建”(/Gm)。任何想法为什么它可能会这样做?这些文件都没有未来的修改日期。
您的任何文件日期都在未来吗?如果您更改了时区或更改了系统时钟时间,就会发生这种情况。未来的日期会混淆 IDE 并在每次按下 F7 或 F5 时强制重建。
我已经解决了同样的问题。
在我的情况下,编译器显示警告,如果指定了 /Gm,则需要 /Zi 选项。
/Gm 启用“最小重建”,这需要 .pdb 文件中的调试信息。因此,如果您不想使用 .pdb,请同时禁用最小重建 - 它解决了我的问题。
很可能是依赖关系的问题。
考虑以下可能性:
如果您为解决方案中的某些文件定义了自定义构建工具,请确保输出属性包含正确的文件名。如果构建工具的输出与输出文件名中指定的不对应,构建器将重新构建该文件。
如果您有自定义构建事件,请检查这些构建事件的输出是否不会影响要构建的文件的依赖关系。
在构建后尝试将一些输出文件复制或移动到构建文件夹时遇到问题。影响构建过程输出文件时间戳的构建后操作将决定每次重建。
项目属性->“C/C++”->“输出文件”->“程序数据库文件名”选项不能为空。通过从下拉框中选择来设置此选项。该选项将设置如下:$(IntDir)\vc90.pdb。并且行 ProgramDataBaseFileName="" 将从 vcproj 文件中删除。
然后,当您构建项目或解决方案时,只会重新编译更改的 *.cpp 文件。
在我的这种效果(通过 VS2005 的 C++)的情况下,它仅在发布配置中,并且 Studio 在构建输出中告诉,如果 /Zi - 选项未设置,编译器选项 /Gm 将被忽略。设置 /Zi via 后
配置属性 -> C/C++ -> 常规 -> 调试信息格式:程序数据库(/Zi),
还可以。但是当发布配置需要一些关于调试的东西时,有什么问题吗?我还不清楚!
似乎这个问题可能是由很多事情引起的,但为我解决的问题是:
bin
文件夹obj
(清理似乎不起作用)注意:这是针对 Visual Studio 2010 中的 C# 程序的。
我遇到了同样的问题,似乎是因为我关闭了浏览信息。属性->C/C++->浏览信息->启用浏览信息->无。我发现的唯一解决方法是重新打开它。这是一个 xbox 360 项目,fwiw,我的其他项目没有问题。
经过几天的谷歌搜索,我最终找到了解决问题的方法。
当我将项目移动到新 PC 时,我遇到了这个问题。我已经检查了几次文件的创建日期。这些日期是最新的,但是即使我更改了文件,修改日期也很糟糕(有点奇怪)。
文件的简单更新解决了这个问题。
一个原因是,如果某个源文件的“上次修改日期”设置为将来的某个日期:它会重建,然后源文件仍然晚于可执行文件。
如果源文件位于远程计算机(网络共享)的目录中,则可能会发生日期问题,并且/或者如果您的计算机的时间与运行服务器的计算机的日期不同步,甚至可能会发生此问题您的源代码版本控制系统。
检查您的项目是否包含磁盘上不存在的任何 .h 头文件。当我删除一个我实际上并没有包含在任何地方的头文件时,总是会发生在我身上,但忘记从我在 VS 中的解决方案导航器中删除它。注意:缺少的标头在构建过程中不会产生错误(当没有#included 时)。
检查项目的程序数据库文件名设置。"$(IntDir)\"
出于某种原因,如果将其设置为目录的名称(例如”)。
这是 VS2008 中的一个错误;我还没有在 VS2010 中重现它,但是我的测试还不够彻底,所以我不确定说 VS2010 中不存在这种行为。
导致我出现类似症状的原因是:我在一个解决方案中有几个项目。有 .cpp 文件被 >1 个项目引用(并因此编译)。不幸的是,Visual Studio 使用非常简单的命名创建 .obj 文件 - 它只是将“.cpp”替换为“.obj”。创建具有不同名称的包装器 .cpp-s 解决了该问题。
我有类似的东西。尽管我确实有构建前后的事件,但它们并没有引起问题。事实证明,我在参考链中有许多项目的内容文件被标记为“总是复制”而不是“如果更新就复制”,这意味着这些项目总是被认为是“过时的”。通过将所有这些更改为“如果更新则复制”,对我的单元测试项目的更改不再强制重新编译所有其他项目。
禁用“最小重建”(配置属性 > C/C++ > 代码生成)为我修复了它。编译器甚至留下了一条线索:
1>cl : 命令行警告 D9007 : '/Gm' 需要 '/Zi 或 /ZI'; 选项被忽略
尽管我必须指出,编译器并没有像它所说的那样忽略该选项。
我们经常在这里:
有同样的问题。解决方法: -delete output folder (obj,exe, all files) -run cygwin -cd project folder -run "touch *", which reset file modify date/time -build and enjoy problem fixed
在我的情况下,我将系统数据时间更改为上一个日期,因此每次都在重建,因为文件的时间戳不同,一旦更改为当前时间,它不会每次都重建。
项目重建也有类似的问题。Visual Studio 不会重新编译,但每次按 F7 时都会重新链接项目。
修复很简单。尝试在编辑器中打开项目中包含的所有文件(从解决方案资源管理器中双击每个文件)并从解决方案中删除那些不存在的文件。