2012-02-23 104 views
20

我的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并行编译多个源文件的话,请分享你的意见。谢谢!

回答

22

这就是我所做的。

在Qt Creator的Tools - > Options菜单中,在“Build and Run”部分下,有一个选项“使用jom而不是nmake”。我检查了那个盒子,但没有任何改变。相反,我去了项目的构建设置,并在构建步骤类别下有一个“Make”项目。展开详细信息,你会发现一个“覆盖mingw32-make.exe:”项。我在那里粘贴了“C:\ QtSDK \ QtCreator \ bin \ jom.exe”,突然间我用多个内核构建。

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

+0

使用JOM而不是mingw32-make很棒!虽然它比VC编译要慢很多,但速度比以前快了很多。 – 2012-02-26 21:14:46

+0

这是因为microsofts编译器希望通过一次调用就可以吃掉很多C++文件。像make这样的传统1970技术不支持这一点,他们称每个调用都有一个文件调用编译器,这对预编译头文件不利,正如你所看到的。切换到更好的构建系统。 – Lothar 2016-10-03 16:21:27

10

-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,即在子品牌中没有并行性。

+1

使用-j的效果很好,虽然它在我的电脑上产生了大量的编译过程。感谢您的输入! – 2012-02-26 22:09:28

+1

除非你正在建造一个大型项目,否则这是一个很好的权宜之计。如果您要编译超过一打的源代码,那么您肯定会遇到主要的CPU问题。如果您编译超过三到四十个来源,则几乎一定会遇到内存问题。 – inetknght 2014-04-25 16:19:20

3

使用MAKE_COMMAND环境变量:

set MAKE_COMMAND=mingw32-make -j%NUMBER_OF_PROCESSORS% 
+1

不,这不适用于mingw32-make。选项-jN简单地被忽略。 – 2012-02-26 22:08:33

+1

不知道该告诉你什么,但它适用于我和其他人:http://stackoverflow.com/questions/1247162/gnu-make-jobs-option-in-qmake – 2012-02-27 16:32:40

0

-j是要走的路,不幸的是,我的项目是如此之大,它使用了我所有的可用内存,我的电脑死机的,所以要意识到这一点。布伦丹说,没有办法只用一半的内核,如果这是真的可惜。

4

添加-j9(更换9NUMBER_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+。

0

Qt Creator中去项目 - >构建&运行 - >您的具体的MinGW构建设置 - >构建环境(这是在屏幕上下方通用/打造步骤/清洁步骤..),然后添加一个变量MAKEFLAGS并将其设置为-j8。我使用-j4和QtCreator 4.4.1以及MinGW 5.3.0在我的两台核心机器上测试了这个功能。编译我的处理器时,运行速度为100%,可以在任务管理器中看到。如果没有这个选项,它大约是25%,所以我认为它完全按照预期工作。现在构建速度更快。