Visual Studio中的c ++并行构建行为[重复]
Posted
技术标签:
【中文标题】Visual Studio中的c ++并行构建行为[重复]【英文标题】:c++ parallel build behavior in visual studio [duplicate] 【发布时间】:2019-09-13 22:55:23 【问题描述】:我观察到具有多个项目且具有多个源文件的 C++ Visual Studio (VS) 2017 解决方案可能无法在单个项目中并行构建。另一方面,项目总是并行构建的。特别是我还发现,当从 CMake 生成 VS 解决方案时,当解决方案中有多个项目时,one 项目中的源文件很可能不会并行构建。从一些 *** 问题和 MSDN 中,我可以看到我们可以在 VS 中设置并行构建,但它不能控制 VS 是否也会在 one 项目中并行构建源文件。有人可以向我解释如何设置它,以便 VS 在所有情况下始终在一个项目中并行构建源文件吗?或者有可能吗?
我的一个典型 VS 解决方案包含约 100 个项目。每个项目包含 2~30 个 .cpp/.h 文件。
编辑:
我的问题与Parallel compilation for projects with dependencies on each other in Visual studio 不同。我想知道当解决方案中存在多个项目时,是否有一种方法可以控制单个项目中并行构建的行为。另一方面,引用的问题与解决方案中具有依赖关系的项目的并行构建问题有关。
EDIT2(回答我的问题):
经过长时间的排查,我终于弄清楚是什么原因导致解决方案无法并行构建的问题。正如我上面提到的,我的问题不与一些未启用的并行构建相关的开关(例如 /MP、# 要使用的线程等)有关。对于那些遇到同样问题的人,我会在这里解释一下。原因很简单。我在项目配置中使用了 Visual Studio 环境变量。我使用的变量是 %(Filename)。在执行 cl.exe 命令之前,Visual Studio 会将所有这些变量转换为它们的实际值。结果,每个源文件都会有一个不同的编译选项,尽管它们在属性表中都有相同的选项“%(Filename)”。如果同一项目中的两个源文件没有相同的编译选项,它们将不会并行构建。总之,慎重使用环境变量,尽可能消除编译选项的差异。
【问题讨论】:
Fwiw,这对 VS 2017 没有启发。我从 6.0 开始就使用 VS,(诚然,甚至在那之前的 vc++ 1.52,上帝啊),我个人 从未 看到在多项目解决方案中并行构建的跨项目源文件。 @WhozCraig,当您编译 [this] (github.com/tbennun/ceres-windows) 时,您实际上发现 VS 正在执行源代码级并行编译。 【参考方案1】:嗯,这取决于你的源文件之间所谓的物理依赖关系。例如,如果文件 A 包含文件 B,则无法并行编译它们。不同项目中的源文件很可能不会相互包含,因此可以并行构建多个项目。请记住,缓慢构建是 C++ 的特征之一,为了实现快速构建,应格外小心,归结为管理源文件之间的物理依赖关系,例如使用前向声明。 John Lakos 的《大规模 C++ 软件设计》一书中对这个问题进行了深入的讨论。
【讨论】:
以上是关于Visual Studio中的c ++并行构建行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 C# Visual Studio 中执行所有测试脚本时执行代码
并行构建 Visual Studio 解决方案会丢失一些静态库的 PDB
Visual Studio Cordova iOS 构建服务器设置