gpt4 book ai didi

visual-studio-2010 - 与 MSBuild 并行的 Qt MOC 多个文件

转载 作者:行者123 更新时间:2023-12-04 08:49:05 24 4
gpt4 key购买 nike

早上好!

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

我在 Visual Studio 2010 下工作,我必须加快我的应用程序的编译时间。我使用所有标志,如 /MP使用 MSBuild -j使用 Make 等... 优化的最后一步是并行化 MOC 步骤。它们非常缓慢,我在谷歌上搜索了很多,但没有找到解决方案。

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

如果有人已经听说过解决方案,那应该真的很酷!

祝你今天过得愉快!

最佳答案

如果您从 qt *.pro 使用 qmake 生成 VC 项目文件,它会以在一个线程中编译 mocables 的方式生成它。我知道解决此行为的唯一方法是显式调用 jom 进行 moc 预处理。

我只有 VS2012(win32-msvc2012),但我曾经为 VS2010 做过类似的事情(在你的情况下是 win32-msvc2010)

为此,您应该自动执行以下步骤:

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

qmake -spec win32-msvc2012 -tp vc -o ${path-to-target}/${your-project}.vcxproj ${path-to-source}/${your-qt-pro}.pro

通过 qmake 从 pro 文件创建 makefile:
qmake -spec win32-msvc2012 CONFIG+=release -o ${path-to-target}/Makefile', ${path-to-source}/${your-qt-pro}.pro

在 vcproj 文件旁边创建以下 .bat 文件(将 %VS100COMNTOOLS% 用于 vc2010,将 x86/x64 用于 arch):
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>
  • 替换为:<ExcludedFromBuild>true</ExcludedFromBuild>
    </CustomBuild>

  • 2) 对于 Project->ItemDefinitionGroup:
  • 查找:</Link>
  • 替换为:</Link>
    <PreBuildEvent>
    <Command>build_moc.bat</Command>
    </PreBuildEvent>

  • 3) 对于 Project->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:
    cd %1
    md build\%2\generated
    c:\\develop\\buildenv\bin\jom.exe -j 16 /F Makefile.%2 mocables

    执行替换的 maven 脚本(maven-replacer-plugin 配置):
    <!-- 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>

    我希望这有帮助

    关于visual-studio-2010 - 与 MSBuild 并行的 Qt MOC 多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23078381/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com