2012-02-23 49 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%,所以我認爲它完全按照預期工作。現在構建速度更快。