2012-06-28 5 views
4

Qt Visual Studio 플러그인을 사용하면 거의 모든 것을 거의 아무렇지도 않게 처리합니다. 불행히도 msbuild에서 CustomBuild 단계를 사용하여 작업을 수행합니다. 이것은 연속적으로 연속적으로 일어납니다. msbuild에게 그들을 병렬로 설득 할 수있는 방법이 있습니까? 저는 저와 같은 월계관에 앉아있는 7 개의 코어에 질려합니다.Qt msbuild에서 여러 파일을 동시에 Mob'ing합니다.

msbuild의 BuildInParallel을 보았습니다. 그러나 여기에 적용하는 방법을 잘 모르겠습니다.

msbuild를 조각 : 병렬

<Project> 
... 
    <ItemGroup> 
    <CustomBuild Include="a_class4.h"> 
     <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs> 
     <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</Message> 
     <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs> 
     <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command> 
    </CustomBuild> 
    <CustomBuild Include="a_class3.h"> 
     <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs> 
     <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</Message> 
     <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs> 
     <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command> 
    </CustomBuild> 
    </ItemGroup> 
... 
</Project> 

답변

0

당신은 만들 수는 jom를 사용하여 :
http://labs.qt.nokia.com/2009/03/27/speeding-up-visual-c-qt-builds/

+0

불행히도 그것은'nmake'를 사용하는 경우에 불과합니다.'msbuild'를 사용하고 있다면 그것이 적용되지 않는다고 저는 믿습니다. – Zac

+0

@Zac - 죄송합니다.이 기능을 놓친 경우 독립 실행 형 스 니펫을 공유 했으므로 캡처를 수행하거나 의도를 구현합니까? –

0

내가 너무 모르는 ... 비주얼 스튜디오 프로젝트에 익숙하지 않다 경우 "CustomBuild "ItemGroup 이름과 메타 데이터 이름이 중요합니다. 만일 그렇게된다면, 당신은

  • 것을 처리하는 MSBuild를 목표 파일을 식별하고 병렬 처리 여기
  • 을 위해 그것을 해결 뭔가에 ItemGroup 이름을 수정

    1. 필요 독립형은 MSBuild 파일입니다 수 병렬로 상황을 실행할 수 있습니다.

      참고 : 나는 프로세스 탐색기를 시작하고 PING.EXE의 많은 경우가 양산 된 방법을 계산하는 데 충분한 시간을 찾을 수 있도록

      1. ping -n 30 -w 1000 127.0.0.2>nul 명령이 추가되었습니다.
      2. 이전에 ping을하지 않으려 고했기 때문에 127.0.0.2로 ping을 시도했습니다.
      3. 파일에서 실제로 유용하게 사용할 수있는 것은 없습니다 ... 속성을 개념 증명으로 표시합니다.
      <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="RunMe"> 
          <ItemGroup> 
           <CustomBuild Include="a_class4.h"> 
            <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs> 
            <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</Message> 
            <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs> 
            <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command> 
           </CustomBuild> 
           <CustomBuild Include="a_class3.h"> 
            <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs> 
            <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</Message> 
            <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs> 
            <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command> 
           </CustomBuild> 
          </ItemGroup> 
          <Target Name="RunMe"> 
           <Message Text="First populate an ItemGroup such that we can use it for parallel processing"/> 
           <ItemGroup> 
            <InputForParallelInvoke Include="$(MSBuildThisFileFullPath)"> 
             <Properties>InputFile=%(CustomBuild.Identity); 
               AdditionalInputs=%(CustomBuild.AdditionalInputs); 
               Message=%(CustomBuild.Message); 
               Outputs=%(CustomBuild.Outputs); 
               Command=%(CustomBuild.Command)</Properties> 
      
            </InputForParallelInvoke> 
           </ItemGroup> 
           <MSBuild Projects="@(InputForParallelInvoke)" Targets="InvokeInParallel" BuildInParallel="True" /> 
          </Target> 
          <Target Name="InvokeInParallel"> 
           <Exec Command="ping -n 30 -w 1000 127.0.0.2>nul &amp; echo Properties=$(InputFile) ##### $(AdditionalInputs) ##### $(Message) ##### $(Outputs) ##### $(Command)"/> 
          </Target> 
      </Project> 
      

      내가 MSBuild를 통해 그것을 호출

    2. 따라서 msbuild /m \path\to\file /p:Configuration=Debug;Platform=Win32 나는 PING.EXE의 두 인스턴스를 참조하십시오.

      희망 사항은 문제를 해결하는 데 도움이됩니다.

    +0

    나는'<메시지 텍스트 = "그룹 구축"/> 추가하여이 시도 입력 파일 = % (CustomBuild.Identity); AdditionalInputs = % (CustomBuild.AdditionalInputs); 메시지 = % (CustomBuild.Message); 출력 = % (CustomBuild.Outputs); Command = % (CustomBuild.명령) ' – Bim

    +0

    와'<대상 이름 = "InvokeInParallel"> <메시지 텍스트 = "Build Group"/> 'C : \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ Microsoft.CppCommon.targets " 항상 오류가 발생합니다. "오류 MSB4184 : 식"[System.IO.Path] :: GetDirectoryName ('') "을 (를) 평가할 수 없습니다." 티가 일한다면 그것은 달콤 할 것입니다! 어떤 아이디어? 그 이유는 모든 사용자 지정 빌드에 대해 병렬 실행을 원했기 때문입니다. – Bim

    +0

    @Bim - 따라 와서 미안해. '$ (MSBuildThisFileFullPath)'는 C : \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ Microsoft.CppCommon.targets가 아닌 ...에 물건을 넣은 파일로 해석됩니다. '. 또한 이전에 공유 한 샘플 독립 실행 형 컨텐츠를 시도했는지 여부는 확실하지 않습니다. –