如何使用QTCreator中的mingw在多个核心上进行编译

时间:2012-02-23 20:34:39

标签: qt qt-creator mingw32

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

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

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

如果你有从QTCreator并行编译多个源文件的话,请分享你的意见。谢谢!

7 个答案:

答案 0 :(得分:22)

这就是我的所作所为。

在工具中 - > Qt Creator中的选项菜单,在“构建并运行”部分下面有一个选项,显示“使用jom而不是nmake”。我检查了那个盒子,但没有改变。所以相反,我去了项目的构建设置,在构建步骤类别下有一个“Make”项。展开详细信息,您将找到“覆盖mingw32-make.exe:”项。我在那里粘贴了“C:\ QtSDK \ QtCreator \ bin \ jom.exe”,突然间我正在构建多核。

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

答案 1 :(得分:11)

由于GN32 Make on Win32的限制,

-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/