2017-06-20 138 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!