首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Qt与MSBuild并行的多个文件

Qt与MSBuild并行的多个文件
EN

Stack Overflow用户
提问于 2014-04-15 08:31:20
回答 1查看 1.5K关注 0票数 8

早上好!

我知道这里已经有了一个问题:Qt Moc'ing multiple files in parallel under msbuild,但我不会出现这个老问题。

我在Visual 2010下工作,我必须加快我的应用程序的编译时间。我用/MP和MSBuild,-j和Make等所有的标志.优化的最后一步是并行化MOC‘’ing步骤。他们是痛苦的缓慢,我谷歌了很多,但我没有找到解决办法。

我知道jom存在,但它使用nmake,我必须使用MSBuild。

如果有人已经听到了解决方案,这应该是很酷的!

祝您今天愉快!

EN

回答 1

Stack Overflow用户

发布于 2016-02-25 18:16:04

如果您从qt *.pro生成带有qmake的VC项目文件,它生成它的方式是在一个线程中编译莫拉索。解决此行为的唯一方法是显式调用jom进行moc预处理。

我只有VS2012 (win32 32- have 2012),但是我曾经为VS2010做过类似的事情(在您的例子中是win32 32-have 2010)。

要做到这一点,您应该自动执行以下步骤:

通过qmake从pro文件创建VC项目:

代码语言:javascript
代码运行次数:0
运行
复制
qmake -spec win32-msvc2012 -tp vc -o ${path-to-target}/${your-project}.vcxproj ${path-to-source}/${your-qt-pro}.pro

通过qmake从pro文件创建makefile:

代码语言:javascript
代码运行次数:0
运行
复制
qmake -spec win32-msvc2012 CONFIG+=release -o ${path-to-target}/Makefile', ${path-to-source}/${your-qt-pro}.pro

在vcproj文件旁边创建以下.bat文件(将%VS100COMNTOLS%用于vc2010,x86/x64用于arch):

代码语言:javascript
代码运行次数:0
运行
复制
call "%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" ${arch}
md build\release\generated 
${environment.dir}\bin\jom.exe -j 16 /F Makefile.release mocables

若要进行调试,请将“发布”更改为“调试”(或引入变量)

现在有必要编辑VC项目文件。下面是您需要查找/替换的内容(使用正则表达式):

1)对于所有包含(标记Project->ItemGroup->CustomBuild Include,其中包含*.h文件):

  • 查找:</CustomBuild>
  • 替换to:<ExcludedFromBuild>true</ExcludedFromBuild> </CustomBuild>

2)项目->ItemDefinitionGroup:

  • 查找:</Link>
  • 替换to:</Link> <PreBuildEvent> <Command>build_moc.bat</Command> </PreBuildEvent>

3)对于项目->ItemDefinitionGroup:-查找:<ItemDefinitionGroup> -替换为:<Target Name="BeforeClean"> <Message Text="Cleaning moc generated files"/> <Exec Command="del \$\(ProjectDir\)..\\\$(Platform\)\\build\\${arch}\\generated\\moc_*.* /F /Q" /> </Target> <ItemDefinitionGroup>

我用Maven自动化了它,下面是引用的代码片段:

build_moc.bat:

代码语言:javascript
代码运行次数:0
运行
复制
cd %1
md build\%2\generated 
c:\\develop\\buildenv\bin\jom.exe -j 16 /F Makefile.%2 mocables

做替换的maven脚本(maven-replacer-plugin配置):

代码语言:javascript
代码运行次数:0
运行
复制
<!-- 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>

我希望这能帮到你

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23078381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档