我观察到具有多个具有多个源文件的项目的 C++ Visual Studio (VS) 2017 解决方案可能不会在单个项目中并行构建。另一方面,项目总是并行构建的。特别是我还发现,当从 CMake 生成 VS 解决方案时,当解决方案中有多个项目时,一个项目内的源文件很可能不会并行构建。从几个 StackOverflow 问题和 MSDN 中,我可以看到我们可以在 VS 中设置并行构建,但它不控制 VS 是否会在一个内构建源文件项目也是并行的。有人可以向我解释如何设置它,以便 VS 在所有情况下始终在一个项目中并行构建源文件吗?或者有可能做到吗?
我的典型 VS 解决方案之一包含约 100 个项目。每个项目包含 2~30 个 .cpp/.h 文件。
编辑:
我的问题与 Visual Studio 中相互依赖的项目的并行编译不同。我想知道当解决方案中存在多个项目时,是否有办法控制单个项目中并行构建的行为。另一方面,引用的问题与解决方案中具有依赖关系的项目的并行构建问题有关。
EDIT2(回答我的问题):
经过长时间的排查,我终于弄清楚是什么原因导致解决方案无法并行构建的问题。正如我上面提到的,我的问题与未启用某些与并行构建相关的开关(例如 /MP、# 要使用的线程等)无关。对于那些遇到同样问题的人,我会在这里解释一下。原因很简单。我在项目配置中使用了 Visual Studio 环境变量。我使用的变量是 %(Filename)。在执行 cl.exe 命令之前,Visual Studio 会将所有这些变量转换为它们的实际值。结果,每个源文件都将具有不同的编译选项,尽管它们都具有相同的属性表中的选项“%(文件名)”。如果同一项目中的两个源文件没有相同的编译选项,它们将不会并行构建。总之,谨慎使用环境变量,尽可能消除编译选项的差异。