我的Windows桌面上有一个四核i7 CPU。我试图让mingw32-make使用尽可能多的内核进行编译。我已将-j8添加到Build Settings-> Build Steps下的“Make Arguments”字段中。 mingw32-make似乎完全忽略了该选项,因为我没有从中获得任何速度提升。当我查看任务管理器中的CPU使用率时,它保持在13%,我只看到一个运行g ++的实例。
现在,使用mingw重建整个项目需要3分钟。使用MSVC重建它只需要15秒。
为了您的信息,我在项目设置中启用了预编译的标题选项。这也使VC的事情变得更快。但我仍然没有看到预编译头与mingw的好处。
如果你有从QTCreator并行编译多个源文件的话,请分享你的意见。谢谢!
答案 0 :(得分:22)
这就是我的所作所为。
在工具中 - > Qt Creator中的选项菜单,在“构建并运行”部分下面有一个选项,显示“使用jom而不是nmake”。我检查了那个盒子,但没有改变。所以相反,我去了项目的构建设置,在构建步骤类别下有一个“Make”项。展开详细信息,您将找到“覆盖mingw32-make.exe:”项。我在那里粘贴了“C:\ QtSDK \ QtCreator \ bin \ jom.exe”,突然间我正在构建多核。
在Qt Creator 2.4.1上为我工作。试一试。
答案 1 :(得分:11)
-j8
可能无法正常工作。
尝试将-j
放入make arguments字段。这告诉Make生成尽可能多的编译进程 - 如果你有足够的RAM和CPU来处理它,它应该比单个编译快。
不幸的是,这是唯一的两个选项(不修改Makefile):-j1
或无限-j
完整详细信息:GNU Make on Win32不支持作业服务器,因此父Make进程无法跟踪任何sub-Make产生的编译进程数。为了安全起见,子Make仅与-j1
一起运行。我相信qmake / Qt Creator生成的Makefile会使用多层Makefile。我首先用Microchip的MPLAB X IDE弄清楚了这个问题,查看this thread了解更多信息
此引用来自与GNU Make分发的README.W32
支持并行构建
此端口支持并行构建(-jN),带2 限制:
并发进程数的硬限制为64, 由于这个端口实现等待它的方式 子进程;
作业服务器方法(Make在Posix上运行时可用 不支持平台),这意味着你必须通过 explicit -jN在递归Makefile中切换到子Make。 如果sub-Make没有收到明确的-jN开关,那么 将默认为-j1,即sub-Make中没有并行性。
答案 2 :(得分:4)
添加-j9
(将9
替换为NUMBER_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
以避免生成丰富的makefile!)。
问题是你在"调试和发布"期间得到两组进程。建立。因此,产生的过程总数为18 +。
答案 3 :(得分:3)
使用MAKE_COMMAND
环境变量:
set MAKE_COMMAND=mingw32-make -j%NUMBER_OF_PROCESSORS%
答案 4 :(得分:1)
在Qt Creator中转到项目 - >建设与发展运行 - >您特定的MinGW构建设置 - >构建环境(这是在General / Build steps / Clean steps ..下面的屏幕上),然后添加一个变量MAKEFLAGS
并将其设置为-j8
。我使用-j4
和QtCreator 4.4.1以及MinGW 5.3.0在我的两台核心机器上测试了这个。编译我的处理器时,以100%的性能运行,如任务管理器中所示。没有这个选项它大概是25%所以我认为它的工作原理与预期完全一致。现在构建速度要快得多。
答案 5 :(得分:0)
-j是要走的路,不幸的是,对我来说项目太大了,它耗尽了我所有的可用内存,而且我的计算机冻结了,所以要注意这一点。 Brendan说没有办法只使用你的一半核心,例如,如果这是真的可惜。
答案 6 :(得分:0)
问题是原始make没有jobserver支持。所以mingw32端口也没有它。然而,它已被添加。我相信具有'正确'作业服务器支持的最旧版本是3.82.90。您可以在下面的链接中找到。
http://sourceforge.net/projects/mingw/files/MinGW/Extension/make/make-3.82.90-cvs-20120823/