【问题标题】:Fast Qt C++ compile on windows在 Windows 上快速编译 Qt C++
【发布时间】:2011-12-05 20:45:01
【问题描述】:

我有一个使用 Qt 框架的大型项目,我正在努力寻找在我的 Windows 安装上编译它的最快方法。

在我家里的 linux 机器上,我使用 3 年的双核 Linux Mint 设置(机器是 3 年的,没有安装 Linux Mint),使用:make -j2 两个内核都使用full(ish) 并且相对较快地编译代码,大约 10 分钟从干净构建开始。

但是,在我的工作 Windows PC 上,它是 2.0 GHz Intel Core 2 Quad (XP),我似乎永远无法让编译速度与我的 Linux 机器一样快。该程序的开发人员文档建议使用从 cmake 生成的项目文件使用 Visual Studio C++,但这似乎只使用一个内核,编译需要一个多小时,而在我的 Linux 安装上大约需要 10 分钟(从干净构建)。

我使用过jom,但即使使用所有内核,它仍然需要大约一个半小时,因为它似乎只在每个内核上使用少量 cpu。

对我来说,我的旧 Linux 机器构建速度很快,但四核却一蹶不振,这对我来说毫无意义。

【问题讨论】:

  • 我也遇到过这种情况,我的全新 Win7 四核机器在工作中构建我的应用程序所需的时间至少比我在家使用 4 年的双核笔记本电脑要长 3 倍。我认为这只是 MinGW 的限制,但如果您使用 VS 来体验它,那么显然情况并非如此。
  • 我发现通过在 SSD 或虚拟内存驱动器上构建(有免费的软件/驱动程序很容易获得)大大缩短了构建时间
  • 在阅读了 Jeff Atwood 所写的关于 SSD 的文章后,我们一直在讨论转向 SSD。然而,SSD drive failure rates 这样的事情让我们的系统人员相当紧张!
  • 我在我的家庭系统中安装了 OCZ Vertex3,它的速度非常快。使用从旋转磁盘构建的 6 核处理器,所有内核运行大约 10%,但从 Vertex3 开始,它们都始终在 85% 和 100% 之间。 (MinGW)(wrt 失败率;不会说话,到目前为止还不错)
  • 我的理解是它依赖于文件 IO 速度,并且“很多小文件”(编译)在 Windows 上要慢很多。不将其发布为答案,因为它是反答案,而只是让您知道您可能无法期望获得相同的性能。 (我听说在 Linux 上的 VM 中运行 Windows,有效地在 Windows 和存储硬件之间添加另一层,据说编译速度比原始 Windows 更快,但我还没有进行公平的比较来确定。)

标签: c++ windows qt compilation cmake


【解决方案1】:

多年来,以下内容帮助我们加快了 Windows C++ Qt 构建的速度:

  1. 自定义了我们的防病毒软件的设置,以排除扫描我们的源代码、目标代码以及我们正在构建的所有头文件和库(Visual Studio、Qt 等)的位置。 (有一个单独的 AV 检查会在一夜之间运行,以扫描那些排除的文件夹)
  2. 比较了各种不同 AV 包下的构建速度。 (这是几年前的事了,但结果,我们从 McAfee 转移到了 Sophos)
  3. 确保在构建期间访问的所有文件都在本地磁盘驱动器上(我们曾经在网络驱动器上针对 Qt 构建,但这会降低构建性能)
  4. 确保将 Visual Studio 配置为一次执行多个编译步骤:This answer shows various ways of 这样做。
  5. 增加了 RAM 的数量:我们现在发现 4 GB 是绝对最小值,对于相当大的代码库
  6. 从静态链接切换到动态链接,大幅缩短链接时间。
  7. 迁移到新版本的 Visual Studio,因为 MS 提高了性能:请参阅 Visual Studio 2010 page,并搜索“更快的编译”

我们的 Windows 构建仍然比 Linux 慢,但我不能说这是一个公平的比较,因为我们共享的 Linux 构建盒的规格比开发人员 PC 高得多。

(顺便说一句,如果您以前从未见过它们,那么值得一读 Jeff Atwood 所说的关于开发人员 PC 的良好配置:例如 Programmer's Bill of Rights

更新:25/10/2012

如果您使用的是带有 DLL 构建的 Visual Studio 2008,我目前不建议迁移到 Visual Studio 2010:存在一个问题,即不必要地重新链接相关项目,这绝对会降低开发人员的工作效率,至少在一个有 20 个左右 .vcxproj 文件的 .sln 中:

这可能有一个解决方案 - 我稍后会更新,一旦我测试过 - 请参阅Unnecessary relinks of dependent projects when building with Visual Studio 2010 CORCOR 说:

如果其他人有类似的问题:

关闭 DLL 项目的表现形式创建和 仅为应用程序项目启用它会有所帮助!

使用 VS2008 这似乎没有问题。

【讨论】:

  • 我会检查可能导致某些问题的网络问题。
  • 如果它确实是一个网络问题:我们有大约 12 个开发人员,并且要求所有构建工具保持一致,同时仍然拥有本地构建工具。我们最终的解决方案是在网络上有一个主文件夹,用于所有构建工具,然后每周安排一个任务,将其镜像到每台开发 PC。这真的很有帮助。
【解决方案2】:

这可能是一种解决方法,但我们使用 Incredibuild,它将构建分布在多台机器上,效果非常好。将我们的构建时间从 40 分钟缩短到 10 分钟。 (我们连接了 6 台开发人员 PC 来分担工作量)

【讨论】:

    【解决方案3】:

    Visual Studio 可以并行编译多个项目,但每个项目都是按顺序编译的。 因此,如果您编译一个包含 2 个项目的解决方案,那么将并行启动两个进程,但如果您只有一个项目,则只会启动一个进程,它将按顺序编译您的源代码。

    如果你使用 MingW,可以关注这个帖子:http://www.mail-archive.com/qt-creator@trolltech.com/msg00156.html

    在那里你会找到解决方案(安装 MSys 并在启动 make 时指定参数 -j 以指定并行作业的数量)。

    这里有一个更简单的解决方案:http://developer.qt.nokia.com/forums/viewthread/855/ (在 QtCreator Tools->Options 中指定 Jom 作为构建工具而不是 NMake)

    【讨论】:

    • 最新版本的 MSVC 还可以在一个项目中并行编译多个 .cpp 文件。
    【解决方案4】:

    我遇到了同样的问题。在我们的机器上运行着一个软件,它试图确定与 Windows 7 的兼容性。该软件将软件的每次启动都记录到数据库中,从而稍微减慢了新进程的启动速度。由于编译器为每个文件启动一个新进程,这大大减慢了整个编译运行。

    【讨论】:

      【解决方案5】:

      在 Visual Studio 中您是否去过:

      Project -> Properties -> C++ 并将“Multiprocessor Compilation”设置为 Yes ?这对我来说是打开多核的诀窍,实际上应该会大大加快速度。

      【讨论】:

      • 这是否添加 /mp 标志 - 仅在 2008 年(可能是 2005 年?)和更新版本中支持 - 显然没有记录?
      • 这里是the VS2010 /MP documentation。请参阅页面顶部的“其他版本”链接以获取等效的 2008 文档。
      【解决方案6】:

      我认为最好的方法是将您的项目拆分为多个项目,每个项目都是静态库项目,通过通常是 MainWindow 类的容器项目将它们连接在一起。因此,第一次编译需要一段时间,然后会很短(取决于您的修改)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 2015-08-29
        • 2021-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多