如何在QTCreator中使用mingw编译多个内核
我的Windows桌面上有一个四核i7 CPU。我试图让mingw32-make使用尽可能多的核心进行编译。我在Build Settings-> Build Steps下的“Make Arguments”字段中添加了-j8。 mingw32-make似乎完全忽略了这个选项,因为我没有从中获得任何速度提升。当我查看任务管理器中的CPU使用率时,它保持在13%,我只看到g ++运行的一个实例。如何在QTCreator中使用mingw编译多个内核
现在,使用mingw重建整个项目需要3分钟。使用MSVC重建它只需要15秒。
有关您的信息,我已启用项目设置中的预编译头选项。这与VC相比使事情变得更快。但是我仍然没有看到mingw预编译头文件的好处。
如果你有过从QTCreator并行编译多个源文件的话,请分享你的意见。谢谢!
这就是我所做的。
在Qt Creator的Tools - > Options菜单中,在“Build and Run”部分下,有一个选项“使用jom而不是nmake”。我检查了那个盒子,但没有任何改变。相反,我去了项目的构建设置,并在构建步骤类别下有一个“Make”项目。展开详细信息,你会发现一个“覆盖mingw32-make.exe:”项。我在那里粘贴了“C:\ QtSDK \ QtCreator \ bin \ jom.exe”,突然间我用多个内核构建。
在Qt Creator 2.4.1上为我工作。试一试。
-j8
由于GNU Make在Win32上的限制,可能不起作用。
试着把-j
放入make参数字段。这就告诉Make生成尽可能多的编译进程 - 如果你有足够的RAM和CPU来处理它,它应该比单个编译更快。
不幸的是,这些是仅有的两个选项(不修改Makefile文件):无论是-j1
,或无限-j
全部细节:GNU请在Win32不支持作业服务器,所以父make进程能够”跟踪由任何子制造商产生的编译过程的数量。为了安全起见,子品牌只能以-j1
运行。我相信qmake/Qt Creator生成的Makefiles使用多层Makefiles。我第一次想通了与Microchip的MPLAB X IDE这个问题,请this thread更多信息
这句话是从README.W32分布与GNU让
支持并行编译
并行构建( -jN)在此端口被支撑,用2个 限制:
并发进程的数量具有64的硬性限制, 由于此端口执行等待其子进程的方式;
作业服务器的方法(如果有的话就Posix的运行 平台)是不支持的,这意味着你必须在递归的Makefile传递一个明确的 -jN切换到子做的。 如果一个子品牌没有收到明确的-jN开关,那么它 将默认为-j1,即在子品牌中没有并行性。
使用-j的效果很好,虽然它在我的电脑上产生了大量的编译过程。感谢您的输入! – 2012-02-26 22:09:28
除非你正在建造一个大型项目,否则这是一个很好的权宜之计。如果您要编译超过一打的源代码,那么您肯定会遇到主要的CPU问题。如果您编译超过三到四十个来源,则几乎一定会遇到内存问题。 – inetknght 2014-04-25 16:19:20
使用MAKE_COMMAND
环境变量:
set MAKE_COMMAND=mingw32-make -j%NUMBER_OF_PROCESSORS%
不,这不适用于mingw32-make。选项-jN简单地被忽略。 – 2012-02-26 22:08:33
不知道该告诉你什么,但它适用于我和其他人:http://*.com/questions/1247162/gnu-make-jobs-option-in-qmake – 2012-02-27 16:32:40
-j是要走的路,不幸的是,我的项目是如此之大,它使用了我所有的可用内存,我的电脑死机的,所以要意识到这一点。布伦丹说,没有办法只用一半的内核,如果这是真的可惜。
添加-j9
(更换9
到NUMBER_OF_PROCESSORS
值(Windows)中/ $(nproc)
(Linux)的加一 - 这是最优的)所有
QString makefilein = " -f " + subtarget->makefile;
线QMAKE \发电机\ makefile.cpp(找到它自己)。
其结果
QString makefilein = " -j9 -f " + subtarget->makefile;
然后运行configure.exe
适当参数应用(!和附加-qmake -dont-process
以避免生成文件的生成丰富的!)。
问题是,您在“调试和发布”构建期间获得了两组进程。因此,产生的进程总数为18+。
问题是原始make没有jobserver支持。所以mingw32端口也没有它。然而,它已被添加。我相信具有'正确的'jobserver支持的最早的版本是3.82.90。你可以在下面的链接中找到它。
http://sourceforge.net/projects/mingw/files/MinGW/Extension/make/make-3.82.90-cvs-20120823/
Qt Creator中去项目 - >构建&运行 - >您的具体的MinGW构建设置 - >构建环境(这是在屏幕上下方通用/打造步骤/清洁步骤..),然后添加一个变量MAKEFLAGS
并将其设置为-j8
。我使用-j4
和QtCreator 4.4.1以及MinGW 5.3.0在我的两台核心机器上测试了这个功能。编译我的处理器时,运行速度为100%,可以在任务管理器中看到。如果没有这个选项,它大约是25%,所以我认为它完全按照预期工作。现在构建速度更快。
使用JOM而不是mingw32-make很棒!虽然它比VC编译要慢很多,但速度比以前快了很多。 – 2012-02-26 21:14:46
这是因为microsofts编译器希望通过一次调用就可以吃掉很多C++文件。像make这样的传统1970技术不支持这一点,他们称每个调用都有一个文件调用编译器,这对预编译头文件不利,正如你所看到的。切换到更好的构建系统。 – Lothar 2016-10-03 16:21:27