【问题标题】:Is mingw32-make `-j` option broken?mingw32-make `-j` 选项是否损坏?
【发布时间】:2017-06-20 07:51:10
【问题描述】:

我正在使用 QtCreator /w Qt 5.6 for Android 编译一个大项目(约 40 个库和 1 个可执行文件)。 QtCreator使用“mingw492_32\bin\mingw32-make.exe”来操作构建。

当我使用默认选项编译时,我的所有项目都能正常编译。

当我在 QtCreator 项目设置中将 -j4-j8 添加到 mingw32-make.exe 命令时,构建速度更快但随机失败。在某些时候,虽然库BA 链接,但我可以在日志中看到它尝试链接BA 编译尚未完成,因此它报告cannot open ..../libA.so

注意:

  • BA 链接的事实由LIBS += -l$$OUT_PWD/../../lib/A/libA.soB 的.pro 文件中管理
  • B 出现在顶级 .pro 文件中的 A 之后 (SUBDIRS += A.pro B.pro)

【问题讨论】:

  • 遗憾的是,Make 在进行并行构建时并不擅长处理依赖关系。这意味着它可以尝试构建依赖于尚未构建的其他东西的东西。
  • @Someprogrammerdude:但是 QtCreator 是调用 Make 的那个,它不应该支持吗?
  • 由于 QtCreator 默认不设置标志,那么 QtCreator 创建的 makefile 可能没有设置为很好地处理并行构建。
  • @Someprogrammerdude:其实是支持的,你只需要手动指定构建依赖,看我的回答。

标签: android c++ mingw qt-creator


【解决方案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!!

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 2010-12-06
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多