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

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

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

  • BuildInParallel タスク パラメーターを MSBuild タスクで使用します。

注意

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

/maxcpucount スイッチ

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

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

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

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

msbuild.exe myproj.proj /maxcpucount:3

BuildInParallel タスク パラメーター

BuildInParallel は、MSBuild のタスクに対する省略可能なブール値パラメーターです。 BuildInParallel を true (既定値) に設定すると、複数のワーカー プロセスが生成され、それと同じ数のプロジェクトを同時にビルドすることができます。 このようなビルドを行うためには、/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 の記述

その他の技術情報

Tuning C++ Build Parallelism blog (C++ での並列ビルドの調整に関するブログ)