2017-06-20 135 views
0

我正在編譯一個使用QtCreator/w Qt 5.6 for Android的大項目(〜40個庫和1個可執行文件)。 QtCreator使用「mingw492_32 \ bin \ mingw32-make.exe」來操作構建。mingw32-make`-j`選項被破壞了嗎?

當我用默認選項編譯時,我的所有項目都編譯好了。

當我在QtCreator項目設置中添加-j4-j8mingw32-make.exe命令時,構建速度更快但隨機失敗。在某些時候,雖然庫BA鏈接,但我可以在日誌中看到它嘗試鏈接B,而A編譯尚未完成,因此它報告cannot open ..../libA.so

需要注意的是:

  • 的事實,BA鏈接被LIBS += -l$$OUT_PWD/../../lib/A/libA.soB的.pro文件管理
  • B出現在頂級.pro文件(SUBDIRS += A.pro B.pro
A
+1

不幸的是,在進行並行構建時,不善於處理依賴關係。這意味着它可以嘗試構建一些依賴於尚未構建的其他內容的東西。 –

+0

@Someprogrammerdude:但是QtCreator是Make的一個,不應該支持嗎? – jpo38

+0

由於QtCreator默認沒有設置標誌,因此可能是由QtCreator創建的makefile不能很好地處理並行構建。 –

回答

1

根據Qmake project dependencies (linked libraries),依賴性必須在.pro文件中明確指定。

所以我在頂層.pro文件中添加(SUBDIRS += A.pro B.pro後):

CONFIG += ordered 
B.depends += A 

答案也PRE_TARGETDEPS += $$OUT_PWD/../../lib/A/libA.soB.so

這些變化,構建與-j4選項顯然是工作,而且分我的項目編譯時間減少了3!