MSBuild での複数のプロジェクトの並行ビルドBuilding Multiple Projects in Parallel with MSBuild

MSBuild では、複数のプロジェクトを並列に実行することによって、これらのプロジェクトをより速くビルドすることができます。You can use MSBuild to build multiple projects faster by running them in parallel. ビルドを並列で実行するには、マルチコア コンピューターまたはマルチプロセッサ コンピューターで次の設定を使用します。To run builds in parallel, you use the following settings on a multi-core or multiple processor computer:

  • /maxcpucount スイッチをコマンド プロンプトで使用します。The /maxcpucount switch at a command prompt.

  • BuildInParallel タスク パラメーターを MSBuild タスクで使用します。The BuildInParallel task parameter on an MSBuild task.

注意

コマンド ラインで /verbosity (/v) スイッチを使うと、ビルドのパフォーマンスが影響を受ける場合があります。The /verbosity (/v) switch in a command line can also affect build performance. ビルド ログ情報の詳細レベルが、トラブルシューティングで使用するために "詳細" または "診断" に設定されている場合、ビルドのパフォーマンスが低下する可能性があります。Your build performance might decrease if the verbosity of your build log information is set to detailed or diagnostic, which are used for troubleshooting. 詳しくは、「ビルド ログの取得」と「コマンド ライン リファレンス」をご覧ください。For more information, see Obtaining Build Logs and Command-Line Reference.

/maxcpucount スイッチ/maxcpucount Switch

/maxcpucount スイッチ (省略形は /m) を使用すると、MSBuild では、並列実行される可能性がある MSBuild.exe プロセスを指定された数だけ作成できます。If you use the /maxcpucount switch, or /m for short, MSBuild can create the specified number of MSBuild.exe processes that may be run in parallel. これらのプロセスは、"ワーカー プロセス" とも呼ばれます。These processes are also known as "worker processes." 各ワーカー プロセスがそれぞれ別のコアまたはプロセッサを使用してプロジェクトをビルドするため、プロセッサごとに異なるプロジェクトを同時にビルドできます。Each worker process uses a separate core or processor, if any are available, to build a project at the same time as other available processors may be building other projects. たとえば、このスイッチを "4" に設定すると、MSBuild では 4 つのワーカー プロセスを作成してプロジェクトをビルドします。For example, setting this switch to a value of "4" causes MSBuild to create four worker processes to build the project.

値を指定せずに /maxcpucount スイッチを追加すると、MSBuild では、コンピューター上のプロセッサの数まで使用します。If you include the /maxcpucount switch without specifying a value, MSBuild will use up to the number of processors on the computer.

MSBuild 3.5 で導入されたこのスイッチについて詳しくは、「コマンド ライン リファレンス」をご覧ください。For more information about this switch, which was introduced in MSBuild 3.5, see Command-Line Reference.

次の例は、MSBuild で 3 つのワーカー プロセスを使用する方法を示しています。The following example instructs MSBuild to use three worker processes. この構成を使用すると、MSBuild では同時に 3 つのプロジェクトをビルドできます。If you use this configuration, MSBuild can build three projects at the same time.

msbuild.exe myproj.proj /maxcpucount:3  

BuildInParallel タスク パラメーターBuildInParallel Task Parameter

BuildInParallel は、MSBuildMSBuild のタスクに対する省略可能なブール値パラメーターです。BuildInParallel is an optional boolean parameter on a MSBuildMSBuild task. BuildInParalleltrue (既定値は false) に設定すると、複数のワーカー プロセスが生成され、それと同じ数のプロジェクトを同時にビルドすることができます。When BuildInParallel is set to true (its default value is false), multiple worker processes are generated to build as many projects at the same time as possible. このようなビルドを行うためには、/maxcpucount スイッチが 1 より大きい値に設定され、システムが最低でもデュアルコアであるか 2 つ以上のプロセッサを搭載している必要があります。For this to work correctly, the /maxcpucount switch must be set to a value greater than 1, and the system must be at least dual-core or have two or more processors.

次の例は、microsoft.common.targets の一部であり、BuildInParallel パラメーターの設定方法を示しています。The following is an example, taken from microsoft.common.targets, about how to set the BuildInParallel parameter.

<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>  

関連項目See Also

複数のプロセッサを使用したプロジェクトのビルド Using Multiple Processors to Build Projects
マルチプロセッサ対応の logger の記述 Writing Multi-Processor-Aware Loggers
C++ での並列ビルドの調整に関するブログTuning C++ Build Parallelism blog