Se si genera un file di progetto VC con qmake da qt * .pro, lo genera in modo che i mocables siano compilati in un thread. L'unico modo per ovviare a questo comportamento è chiamare esplicitamente jom per la pre-elaborazione di moc.
ho solo VS2012 (win32-msvc2012), ma ho usato per fare la cosa simile per VS2010 (win32-msvc2010 nel tuo caso)
Per fare questo si deve automatizzare i seguenti passi:
Crea progetto di VC da file pro attraverso qmake:
qmake -spec win32-msvc2012 -tp vc -o ${path-to-target}/${your-project}.vcxproj ${path-to-source}/${your-qt-pro}.pro
creare makefile da file pro attraverso qmake:
qmake -spec win32-msvc2012 CONFIG+=release -o ${path-to-target}/Makefile', ${path-to-source}/${your-qt-pro}.pro
Creare il seguente file .bat accanto al vcproj di file (mettere% VS100COMNTOOLS% per vc2010 e x86/x64 per arch):
call "%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" ${arch}
md build\release\generated
${environment.dir}\bin\jom.exe -j 16 /F Makefile.release mocables
Per fare il debug costruire il cambiamento 'rilascio' a 'debug' (o introdurre un variabile)
Ora è necessario modificare il file di progetto VC. Ecco cosa è necessario trovare/sostituire (utilizzando le espressioni regolari):
1) Per tutti include (tag Progetto-> GruppoDi-> CustomBuild Include che contiene *.h file:
- ritrovamento:
</CustomBuild>
- Sostituisci per:
<ExcludedFromBuild>true</ExcludedFromBuild> </CustomBuild>
2) per Progetto-> ItemDefinitionGroup:
- ritrovamento:
</Link>
- sostituire a:
</Link> <PreBuildEvent> <Command>build_moc.bat</Command> </PreBuildEvent>
3) per Progetto-> ItemDefinitionGroup: - trovare: <ItemDefinitionGroup>
- sostituire a: <Target Name="BeforeClean"> <Message Text="Cleaning moc generated files"/> <Exec Command="del \$\(ProjectDir\)..\\\$(Platform\)\\build\\${arch}\\generated\\moc_*.* /F /Q" /> </Target> <ItemDefinitionGroup>
automatizzo con Maven, ecco il frammento di codice per il riferimento:
build_moc.bat :
cd %1
md build\%2\generated
c:\\develop\\buildenv\bin\jom.exe -j 16 /F Makefile.%2 mocables
sceneggiatura
Maven che fa le sostituzioni (Maven-sostituto-plugin config):
<!-- Disabling moc preprocessor steps, since we do it with jom -->
<replacement>
<xpath>//Project/ItemGroup/CustomBuild[contains(@Include,'.h')]</xpath>
<token><![CDATA[</CustomBuild>]]></token>
<value><![CDATA[
<ExcludedFromBuild>true</ExcludedFromBuild>
</CustomBuild>
]]></value>
</replacement>
<!-- Adding moc preprocessor steps with jom -->
<replacement>
<xpath>//Project/ItemDefinitionGroup[not(@*)]</xpath>
<token><![CDATA[</Link>]]></token>
<value><![CDATA[
</Link>
<PreBuildEvent>
<Command>\$\(ProjectDir\)../${arch}/build_moc.bat \$\(ProjectDir\)../${arch} \$\(Configuration\)</Command>
</PreBuildEvent>
]]></value>
</replacement>
<!-- Cleaning moc files -->
<replacement>
<token><![CDATA[<ItemDefinitionGroup>]]></token>
<value><![CDATA[
<Target Name="BeforeClean">
<Message Text="Cleaning moc generated files"/>
<Exec Command="del \$\(ProjectDir\)..\\\$\(Platform\)\\build\\${arch}\\generated\\moc_*.* /F /Q" />
</Target>
<ItemDefinitionGroup>
]]></value>
</replacement>
Spero che questo aiuti