Visual Studio - 如何避免每次构建时编译所有项目文件?

6
每次我在Visual Studio 2010中构建我的Visual C++解决方案时,整个项目(而不是整个解决方案)都会重新编译。
一定有一个标志或配置可以让VS仅编译更改的文件+依赖文件。它在哪里?
更新:
- 我在我的项目配置属性\C/C++\代码生成\启用最小重建中将“Yes (/Gm)”设置为“是”。但它仍然会在按F7时编译所有项目文件。
5个回答

6
如果在构建时还收到类似于以下消息:

Creating ".\Release\SomeLib.unsuccessfulbuild" because "AlwaysCreate" was specified.

原因可能是您的其中一个项目引用了磁盘上不存在的头文件(请参见此处此处)。第一个链接还包括一个检查此情况的小型C#脚本。要解决问题,只需从项目中删除对不存在的头文件的引用即可。
更新
可能您的预编译标头设置为“创建”。要解决问题,请右键单击解决方案浏览器中的项目,然后选择:属性 -> C/C++ -> 预编译标头 -> 预编译标头。将设置从创建更改为使用不使用预编译标头

3

默认情况下,VS应该按照您的意愿运行;听起来好像有些不稳定。清理项目,并删除您的设置文件(例如.suo/vcproj..user /等)。这种情况有几个原因,其中一些我见过:

  • 损坏的设置文件
  • 系统日期/时间/时区更改混淆了VC
  • 源文件权限问题

另外,还有不正确的自定义构建规则,以及一个会触及顶层头文件的构建步骤。 - the_mandrill
是的,我可能在配置方面搞砸了些什么,但我不想从头开始。我正在寻找我错误更改的特定配置。 - Jonathan Livni
我不相信有这样的配置。这是VS一直工作的方式。 - tenfour
@the_mandrill - 你能详细说明一下吗?我在哪里可以看到构建规则? - Jonathan Livni
@Jonathan:不同的文件类型具有不同的构建规则。你是自己创建这个项目吗?如果是,那么你可能没有任何自定义的构建规则。如果这些规则是由其他人创建的,则可能已经存在。它们在项目属性的“自定义构建”部分以每个文件为基础公开。 - the_mandrill
另外还有一件事可以尝试:创建一个全新的 SCM 检出,看看问题是否得以解决。如果您的构建树中存在某些时间戳/文件损坏问题,则应该可以通过此方法解决。 - the_mandrill

2
所以,我们的项目出现了同样的问题。首先,我通过选择以下内容来调试编译器输出:
-> 工具 -> 选项 -> 项目和解决方案 -> 构建和运行 -> MSBuild项目构建输出详细程度 -> 详细信息。
结果发现,有人将所有文件的项目设置为始终创建预编译标头(/Yc)。我按照下面列出的选项更改了这一选项:
-> 配置属性 -> 预编译标头 -> 使用(/Yu)
然后我将stdafx.cpp的相同选项设置为(/Yc)。这样,stdafx.cpp的编译就会创建预编译标头,所有其他的.cpp文件也将使用预编译标头。这是默认情况,我不确定它如何在我们的项目中更改。
此外,我已经将我们所有的编译器设置变得一致,包括:
1)设置:C/C++ - > 预编译头 - > 预编译头 - > 使用(/Yu) 开关: /Yu 原因:编译时间更快。
2)设置:C/C++ - > 一般 - > 调试信息格式 - > 可编辑和继续的程序数据库 开关: /ZI 原因:启用编辑和继续功能,从而提高了调试能力。
3)设置:C/C++ - > 代码生成 - > 启用最小重建 - > 是 开关: /Gm 原因:允许和加速增量构建,这也是/ZI所必需的。
希望这可以帮助您。我花了很多时间调整我们的项目构建设置并阅读Stack Overflow上的帖子,在最后,我想念C#。

2
我们推出了tul的职位,因为我们也有一些项目需要重新编译。结果我发现:
- 是的,在我们的Visual 2010项目中,“最小重建”选项某种程度上已经损坏了。我猜想这可能是它们从Visual 2005转换而来时发生的。 - 在特定项目中,“损坏”的标志是该选项被分配了,即它是粗体的。这可能只针对某些配置,例如发布版,或某些架构,例如x64。它可能是粗体的“NO”,但仍然需要重新编译。
修复很容易,只需按照以下步骤进行:
- 选择一个或多个解决方案中的项目 - 右键单击项目->属性 - 选择配置:“所有配置” - 选择平台:“所有平台”(如果您同时拥有x32 / x64) - 展开C ++组 - 转到“代码生成” - 注意“启用最小重建”选项--它很可能为空,因为不同的项目/配置具有不同的值 - 将此选项设置为“NO” - 单击应用按钮 - 再次将此选项设置为“从父级继承” - 单击应用按钮。现在,您应该看到此选项变为“NO”,但以纯文本形式显示。
完成。甚至无需重新编译。下一次构建将会更快。

1

我遇到了同样的问题,但我的问题突然出现,我没有进行任何项目配置更改。

我只编辑一个文件,然后点击构建,它就会重新构建整个项目。

经过长时间的试验,我发现关闭“最小重建”可以解决这个问题。关闭后,我可以再次更改一个文件,它只会编译那个文件。

奇怪的是,一旦我成功地使用最小重建禁用进行构建,我就可以将其打开,一切都恢复正常。

这让我想到某个缓存文件可能已经损坏了?我尝试删除所有中间目录,但仍然无济于事,所以如果是损坏的文件,我不认为它在我的项目目录中的任何位置。

希望这可以帮助你。


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