проблема с использованием MSBUILD с опцией maxcpucount - PullRequest
1 голос
/ 07 сентября 2010

Я использую MsBuild на 4-х ядерном компьютере.Я даю следующую командную строку для построения 4 проектов, относящихся к большому решению VC ++ (с более чем 4 проектами ВСЕ без взаимных зависимостей).Я использую Visual Studio 2008.

Чтобы ускорить время сборки, я пытаюсь воспользоваться опциями maxcpucount, но, похоже, это не работает.Я ожидал, что каждое ядро ​​создаст каждый из 4 проектов, которые я предоставляю в командной строке.К сожалению, я измерил время сборки и с опцией maxcpucount или без нее у меня точно такой же результат.

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe MyVCppSolution.sln 
     /t:ProjA;ProjB;ProjC;ProjD /m

Вы знаете, что я здесь делаю неправильно?

Правильный способ сказать: «Создает 4 проекта решения MyVCppSolution.sln одновременно», или я должен запустить вручную 4 процесса, каждый из которых строит один проект решения до 4?

1 Ответ

5 голосов
/ 08 сентября 2010

MSBuild может проектов параллельно. Ваш вызов из командной строки (с использованием / t) запрашивает target для параллельного построения, что не совсем так. Вы также должны установить флаг в основном файле .proj для параллельного

Чтобы получить то, что вы хотите (4 элемента параллельно, используя все доступные ядра), вам необходим «общий» proj-файл, который вызывает msbuild и для параметра BuildInParallel установлено значение true. Тогда этот звонок, называет ваши другие проекты. Комбинация / m в msbuild.exe и BuillInParallel даст вам то, что вы хотите.

Так что хотелось бы: (Если вы хотите, чтобы ProjA, B, C, D были встроены параллельно)

Файл buildall.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion=”3.5”>
     <Target Name="default">
          <MSBuild Projects="proja.proj, projb.proj, probc.proj,prod.proj" BuildInParallel="true"/>
     </Target>
</Project>

Тогда вы бы позвонили в buildall с

msbuild.exe buildall.proj /m:4
...