MSBuild での複数のプロジェクトの並行ビルド

MSBuild では、複数のプロジェクトを並列に実行することによって、これらのプロジェクトをより速くビルドすることができます。 ビルドを並列で実行するには、マルチコア コンピューターまたはマルチプロセッサ コンピューターで次の設定を使用します。

  • /maxcpucount スイッチをコマンド プロンプトで使用します。

  • MSBuild タスクの BuildInParallel タスク パラメーター。

注意

コマンド ラインで /verbosity (/v) スイッチを使うと、ビルドのパフォーマンスが影響を受ける場合があります。 ビルド ログ情報の詳細レベルが、トラブルシューティングで使用するために "詳細" または "診断" に設定されている場合、ビルドのパフォーマンスが低下する可能性があります。 詳しくは、「ビルド ログの取得」と「コマンド ライン リファレンス」をご覧ください。

/maxcpucount スイッチ

/maxcpucount スイッチ (省略形は /m) を使用すると、MSBuild では、並列実行される可能性がある MSBuild.exe プロセスを指定された数だけ作成できます。 これらのプロセスは、"ワーカー プロセス" とも呼ばれます。 各ワーカー プロセスがそれぞれ別のコアまたはプロセッサを使用してプロジェクトをビルドするため、プロセッサごとに異なるプロジェクトを同時にビルドできます。 たとえば、このスイッチを "4" に設定すると、MSBuild では 4 つのワーカー プロセスを作成してプロジェクトをビルドします。

値を指定せずに /maxcpucount スイッチを追加すると、MSBuild では、コンピューター上のプロセッサの数まで使用します。

MSBuild 3.5 で導入されたこのスイッチについて詳しくは、「コマンド ライン リファレンス」をご覧ください。

次の例は、MSBuild で 3 つのワーカー プロセスを使用する方法を示しています。 この構成を使用すると、MSBuild では同時に 3 つのプロジェクトをビルドできます。

msbuild.exe myproj.proj /maxcpucount:3  

BuildInParallel タスク パラメーター

BuildInParallel は、MSBuild のタスクに対する省略可能なブール値パラメーターです。 BuildInParalleltrue (既定値) に設定すると、複数のワーカー プロセスが生成され、それと同じ数のプロジェクトを同時にビルドすることができます。 このようなビルドを行うためには、/maxcpucount スイッチが 1 より大きい値に設定され、システムが最低でもデュアルコアであるか 2 つ以上のプロセッサを搭載している必要があります。

次の例は、microsoft.common.targets の一部であり、BuildInParallel パラメーターの設定方法を示しています。

<PropertyGroup>  
    <BuildInParallel Condition="'$(BuildInParallel)' ==   
        ''">true</BuildInParallel>  
</PropertyGroup>  
<MSBuild  
    Projects="@(_MSBuildProjectReferenceExistent)"  
    Targets="GetTargetPath"  
    BuildInParallel="$(BuildInParallel)"  
    Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);   
        %(_MSBuildProjectReferenceExistent.SetPlatform)"  
    Condition="'@(NonVCProjectReference)'!='' and   
        ('$(BuildingSolutionFile)' == 'true' or   
        '$(BuildingInsideVisualStudio)' == 'true' or   
        '$(BuildProjectReferences)' != 'true') and     
        '@(_MSBuildProjectReferenceExistent)' != ''"  
    ContinueOnError="!$(BuildingProject)">  
    <Output TaskParameter="TargetOutputs"   
        ItemName="_ResolvedProjectReferencePaths"/>  
</MSBuild>  

関連項目

複数のプロセッサを使用したプロジェクトのビルド
マルチプロセッサ対応の logger の記述
C++ での並列ビルドの調整に関するブログ