25

我的 Windows 桌面上有一个四核 i7 CPU。我试图让 mingw32-make 使用尽可能多的核心进行编译。我已将 -j8 添加到 Build Settings->Build Steps 下的“Make Arguments”字段中。mingw32-make 似乎完全忽略了该选项,因为我没有从中获得任何速度提升。当我在任务管理器中查看 CPU 使用率时,它保持在 13%,我只看到一个 g++ 实例正在运行。

现在,使用 mingw 重建整个项目需要整整 3 分钟。使用 MSVC 重建它只需 15 秒。

为了您的信息,我在项目设置中启用了预编译头选项。这也让 VC 的事情变得更快。但是我仍然没有看到使用 mingw 预编译头文件的好处。

如果您曾经让 mingw 从 QTCreator 并行编译多个源文件,请分享您的意见。谢谢!

4

7 回答 7

21

这就是我所做的。

在 Qt Creator 的 Tools -> Options 菜单中,在“Build and Run”部分下,有一个选项显示“Use jom instead of nmake”。我检查了那个框,但没有任何改变。所以相反,我去了项目的构建设置,在构建步骤类别下有一个“制作”项目。展开详细信息,您会发现“Override mingw32-make.exe:”项。我在其中粘贴了“C:\QtSDK\QtCreator\bin\jom.exe”,突然间我开始构建多核。

在 Qt Creator 2.4.1 上为我工作。试试看。

于 2012-02-23T21:24:47.377 回答
12

-j8由于 GNU Make 在 Win32 上的限制,可能无法正常工作。

尝试只-j放入 make arguments 字段。这告诉 Make 产生尽可能多的编译进程——如果你有足够的 RAM 和 CPU 来处理它,它应该比单个编译更快。

不幸的是,这是仅有的两个选项(不修改 Makefile):要么-j1,要么无限制-j

详细信息:Win32 上的 GNU Make 不支持作业服务器,因此父 Make 进程无法跟踪任何子 Make 生成的编译进程的数量。为安全起见,子 Make 仅使用-j1. 我相信 qmake/Qt Creator 生成的 Makefile 使用了多层 Makefile。我首先使用 Microchip 的 MPLAB X IDE 发现了这个问题,查看此线程了解更多信息

此引用来自 README.W32 随 GNU Make 分发

支持并行构建

此端口支持并行构建 (-jN),但有 2 个限制:

  • 由于此端口实现等待其子进程的方式,并发进程的数量有 64 个硬性限制;

  • 不支持作业服务器方法(当 Make 在 Posix 平台上运行时可用),这意味着您必须将显式 -jN 开关传递给递归 Makefile 中的子 Make。如果 sub-Make 没有收到显式的 -jN 开关,它将默认为 -j1,即 sub-Make 中没有并行性。

于 2012-02-23T21:03:44.063 回答
4

-j9(替换9NUMBER_OF_PROCESSORS(Windows)/ $(nproc)(Linux) 的值加一 - 这是最佳的)到所有

QString makefilein = " -f " + subtarget->makefile;

qmake\generators\makefile.cpp中的行(自己查找)。

结果为

QString makefilein = " -j9 -f " + subtarget->makefile;

然后configure.exe使用适当的参数运行(!以及额外-qmake -dont-process的以避免生成大量生成文件!)。

问题是您在“调试和发布”构建期间获得了两组进程。因此,产生的进程总数为 18+。

于 2012-10-16T10:14:33.577 回答
3

使用MAKE_COMMAND环境变量:

set MAKE_COMMAND=mingw32-make -j%NUMBER_OF_PROCESSORS%
于 2012-02-23T23:03:25.753 回答
2

在 Qt Creator 中,转到 Projects -> Build & Run -> your specific MinGW build setup -> Build Environment(这是在 General / Build steps / Clean steps 下方的屏幕上),然后添加一个变量MAKEFLAGS并将其设置为-j8. 我在我的两台核心机器上使用-j4QtCreator 4.4.1 和 MinGW 5.3.0 进行了测试。在编译我的处理器时,可以在任务管理器中看到 100% 的性能。如果没有这个选项,它大约是 25%,所以我认为它完全按预期工作。现在构建速度要快得多。

于 2017-11-21T17:31:56.147 回答
0

-j 是要走的路,不幸的是,对我来说,这个项目太大了,它耗尽了我所有的可用内存并且我的电脑死机了,所以要注意这一点。Brendan 说,例如,没有办法只使用一半的核心,如果这是真的,那真是太可惜了。

于 2012-03-22T19:46:38.007 回答
0

问题是原始品牌没有作业服务器支持。所以mingw32端口也没有。然而,它已经被添加了。我相信具有“正确”作业服务器支持的最旧版本是 3.82.90。您可以在下面的链接中找到它。

http://sourceforge.net/projects/mingw/files/MinGW/Extension/make/make-3.82.90-cvs-20120823/

于 2014-04-25T16:17:14.663 回答