2012-05-03 39 views
3

我有一个项目配置了Visual Studios 2008.当我打开IDE并点击构建时,系统上的所有内核都用于构建项目。但是,当我尝试从命令行构建时,只使用了1个内核。下面是我运行命令:MSBuild没有与所有内核构建

C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild VTK.sln /m /fl /tv:3.5 /p:Configuration=RelWithDebInfo 

从阅读的文档,它会出现/ m开关应该告诉的MSBuild使用所有的内核,但事实并非如此。任何想法如何使它使用所有的核心?

感谢

回答

2

嗯,其实/m选项指定“并发进程建立与最大数量”。也就是说,并行启动的最大并行数量为msbuild.exe的进程可并行构建项目(每个进程至多会构建一个项目)。与“使用所有核心”完全不同。虽然,不可否认,/m选项的长格式名称,/maxcpucount可能暗示,否则,它的描述应该给一个什么样的更好的指标是怎么回事:

/maxcpucount[:n] Specifies the maximum number of concurrent processes to 
        build with. If the switch is not used, the default 
        value used is 1. If the switch is used without a value 
        MSBuild will use up to the number of processors on the 
        computer. (Short form: /m[:n]) 

现在,如果您的解决方案不允许项目可以并行构建,例如,因为您的每个项目都是另一个项目的依赖项(比如P1需要构建P2,P2需要项目P3等),所以不会看到任何并行构建发生。根据构建完成的速度,您也不会在所有内核上看到任何相关活动(例如,使用任务管理器),因为CPU图形的“闪烁”可能实际上并不准确也相当I/O密集型,它不显示CPU负载)。

但是,您应该看到(例如使用Process Explorer或任务管理器)多个msbuild.exe进程,这些进程与您拥有的核心数/ CPU数相匹配(或者您作为可选数传递给/m的等效数选项。

您可能还需要参考this SO question,另外寻找“并行的MSBuild”产生一些好的命中更多的信息。

+0

我会认为这是所有设置已经在我的解决方案文件,当我通过IDE构建.sln文件我在任务管理器中看到了4个cl.exe进程,但是,我只能在任务管理器上看到一个cl.exe和一个msbuild.exe进程当我从命令行运行它。为了清楚起见,使用CMake为我生成了解决方案文件。 – Jon

+0

使用'/ m'为我工作。 – Oliver

相关问题