我正在开发一个基于 Qt 的大型项目,即使在 6 核机器上编译也需要几个小时。
这样做的原因是,当我make
只运行一个内核编译源代码时:其他内核保持空闲状态。
解决方案是使用我机器的所有 6 个内核执行make
选项-j
(类似于make -j6
)。
这样做的问题是make
不要在递归中产生。
例如:
我有 4 个模块,A、B、C 和 D: - D 依赖于 A、B 和 C。 - B 依赖于 A。 - C 仅依赖于系统库。- A 仅依赖于系统库。
该qmake
应用程序为上述每个模块生成了一个 Makefile,并为编译所有模块生成了一个 Makefile。
当我运行时make -j6
,这 6 个作业开始编译所有模块,而不是一一编译。这种行为是有问题的,因为当必须将模块 D 链接到其他模块时,这些模块可能还没有准备好,从而引发not found
错误。
是否可以通过make
选项更改此行为?这可能是软件工程的问题(模块没有很好地投影)?