为什么Visual Studio 2008总是重新构建整个项目?

12

我有一个包含大约60个C++源文件的Visual Studio工程。 我可以进行构建,并且没有出现错误。 但如果我立即再次按F7,它总是重新编译约50个源文件。 这很奇怪,因为它没有重新编译所有文件。

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


抱歉,这主要是C++,还有一些C。 - Rocketmagnet
2
如果你执行“解决方案/清理”和/或“重新生成全部”,问题是否会消失?如果你关闭“启用最小重建”选项,问题是否会消失? - ChrisW
我尝试了清理和重建所有内容,但问题仍然存在。没有尝试禁用最小重建。然而,今天早上它似乎表现良好! - Rocketmagnet
就我所知,过去使用“增量链接”等功能时存在问题;因此,我关闭了这些功能并专注于其他减少构建时间的方法。 - ChrisW
“其他方法”包括https://dev59.com/Y3NA5IYBdhLWcg3wUL9Y#1014671以及Lakos的书中所述。 - ChrisW
我的重建是由于项目中的头文件实际上不存在,因为移动了文件位置。忽略了那些大问号。 - Lothar
18个回答

1

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

这是VS2008中的一个错误;我尚未在VS2010中重现此错误,但我的测试并不充分,因此我不能确定该行为是否存在于VS2010中。


0

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

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


0
遇到了同样的问题。解决方法如下: - 删除输出文件夹(obj、exe、所有文件) - 运行Cygwin - 切换到项目文件夹 - 运行“touch *”,重置文件修改日期/时间 - 构建并享受问题已解决的乐趣

0
我曾经遇到过类似的问题。虽然我有预构建和后构建事件,但它们并没有引起问题。事实证明,我在参考链下有许多项目,这些项目具有标记为“始终复制”而不是“仅在更新时复制”的内容文件,这意味着这些项目始终被认为是“过时的”。通过将所有这些更改为“仅在更新时复制”,我的单元测试项目的更改不再强制重新编译所有其他项目。

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

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

0

我们经常在这里做以下操作:

  • 手动删除所有中间和输出文件。VStudio 中的清理选项有时不够用。从头开始进行完整的构建。如果在完整的构建之后,VStudio 仍然想要重新编译某些文件,则可能与下一个项目有关。
  • 如果在您的 vcxproj 中引用了一个不存在于磁盘上的头文件,则该项目也会被重新编译。您可以通过 MSDN 博客上描述的一些隐藏功能来检查此问题,或者只需点击项目浏览器中的所有头文件(即打开它们),看看是否存在不存在于磁盘上的文件。

0

对我来说,禁用“最小重建”(配置属性>C/C++>代码生成)解决了这个问题。编译器甚至留下了一个线索:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接