2012-05-03 22 views
3

私はVisual Studio 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のプロセスを並行して開始して、並列にプロジェクトを構築します(各プロセスはたいてい1つのプロジェクトを構築します)。 「すべてのコアを使用する」とは全く異なるもの。 /maxcpucountがそうでなければヒントかもしれない、/mオプションの確かに、長い形式の名前、けれども、それの説明は何が起こっているのより良い指示を与える必要があります。

/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の負荷を見ていない)。

コア/ CPUの数と等しい数のmsbuild.exeプロセス(たとえば、プロセスエクスプローラまたはタスクマネージャを使用)を参照する必要があります(または、/mにオプション番号として渡す同等の番号オプション。

あなたはまたthis SO questionを参照することをお勧めします。また、「並列のMSBuild」の検索は、より多くの情報といくつかの良いヒットを生成します。

+0

私は、これはすべてのときのように、私のソリューションファイルにすでに設定されていることを思うだろう私はIDEを介して.slnファイルをビルドします。私はタスクマネージャで4つのcl.exeプロセスを参照していますが、私はタスクマネージャで1つのcl.exeと1つのmsbuild.exeプロセスしか見ることができません私はコマンドラインから実行します。分かりやすくするために、CMakeを使用して私のためにソリューションファイルを生成しました。 – Jon

+0

'/ m'を使って私の仕事をしました。 – Oliver

関連する問題