2012-05-03 40 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

相關問題