Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VisualStudio中C++并行构建行为 我观察到C++ VisualStudio vs 2017具有多个源文件的多个项目的解决方案可能不会在一个项目中并行构建。另一方面,项目总是并行构建的。特别是,我还发现,当从CMake生成VS解决方案时,当解决方案中有多个项目时,一个项目中的源文件很可能不会并行构建。从几个StackOverflow问题和MSDN中,我可以看出我们可以在VS中设置并行构建,但它不能控制VS是否也会在一个项目中并行构建源文件。有人能告诉我如何设置它,使VS在所有情况下都能在一个项目中并行地构建源文件吗?还是有可能做到_C++_Cmake_Visual Studio 2017_Parallel Builds - Fatal编程技术网

VisualStudio中C++并行构建行为 我观察到C++ VisualStudio vs 2017具有多个源文件的多个项目的解决方案可能不会在一个项目中并行构建。另一方面,项目总是并行构建的。特别是,我还发现,当从CMake生成VS解决方案时,当解决方案中有多个项目时,一个项目中的源文件很可能不会并行构建。从几个StackOverflow问题和MSDN中,我可以看出我们可以在VS中设置并行构建,但它不能控制VS是否也会在一个项目中并行构建源文件。有人能告诉我如何设置它,使VS在所有情况下都能在一个项目中并行地构建源文件吗?还是有可能做到

VisualStudio中C++并行构建行为 我观察到C++ VisualStudio vs 2017具有多个源文件的多个项目的解决方案可能不会在一个项目中并行构建。另一方面,项目总是并行构建的。特别是,我还发现,当从CMake生成VS解决方案时,当解决方案中有多个项目时,一个项目中的源文件很可能不会并行构建。从几个StackOverflow问题和MSDN中,我可以看出我们可以在VS中设置并行构建,但它不能控制VS是否也会在一个项目中并行构建源文件。有人能告诉我如何设置它,使VS在所有情况下都能在一个项目中并行地构建源文件吗?还是有可能做到,c++,cmake,visual-studio-2017,parallel-builds,C++,Cmake,Visual Studio 2017,Parallel Builds,我的一个典型VS解决方案包含约100个项目。每个项目包含2~30个.cpp/.h文件 编辑: 我的问题与我的不同。我想知道当一个解决方案中存在多个项目时,是否有一种方法可以控制单个项目中并行构建的行为。另一方面,所引用的问题与解决方案中具有依赖关系的项目的并行构建问题有关 EDIT2回答我的问题: 经过长时间的调查,我终于找出了导致解决方案无法并行构建的原因。正如我前面提到的,我的问题与一些与并行构建相关的开关无关,例如/MP、要使用的线程等。未启用。对于那些遇到同样问题的人,我将在这里解释。原

我的一个典型VS解决方案包含约100个项目。每个项目包含2~30个.cpp/.h文件

编辑:

我的问题与我的不同。我想知道当一个解决方案中存在多个项目时,是否有一种方法可以控制单个项目中并行构建的行为。另一方面,所引用的问题与解决方案中具有依赖关系的项目的并行构建问题有关

EDIT2回答我的问题:


经过长时间的调查,我终于找出了导致解决方案无法并行构建的原因。正如我前面提到的,我的问题与一些与并行构建相关的开关无关,例如/MP、要使用的线程等。未启用。对于那些遇到同样问题的人,我将在这里解释。原因很简单。我在项目配置中使用了VisualStudio环境变量。我使用的变量是%Filename。在执行cl.exe命令之前,visual studio将把所有这些变量转换为它们的实际值。因此,每个源文件都有一个不同的编译选项,尽管它们在属性表中都有相同的选项%Filename。如果同一项目中的两个源文件没有相同的编译选项,则不会并行生成它们。总之,请仔细使用环境变量,以尽可能消除编译选项中的差异。

这取决于源文件之间所谓的物理依赖关系。例如,如果文件A包含文件B,则无法并行编译它们。不同项目中的源文件可能互不包含,因此可以并行构建多个项目。请记住,慢速构建是C++的特性之一,应该特别小心,以实现快速构建,并归结为管理源文件之间的物理依赖性,例如使用前向声明。John Lakos在《大型C++软件设计》一书中对这个问题进行了深入的讨论。

FWW,这对VS 2017来说并不是什么启发。我从6.0开始使用VS,不可否认,甚至在那之前的vc++1.52,天哪,我个人从未见过在多项目解决方案中并行构建相同项目间的源文件。@WhozCraig,当你编译[这个]时,你实际上发现VS正在进行源代码级并行编译。