0

问题是构建我们的应用程序需要大量时间(20-30 分钟)。

大约有5000多个文件,代码分为各个子系统,可以独立构建。每个子系统都有自己的 makefile。

我的问题是:是否可以为每个 makefile 创建一个线程,以便并行构建所有子系统,然后运行一个 makefile 将它们全部合并?

如果可能,如何进行?

4

2 回答 2

7

您可以使用 make 的并行功能。使用-j numbermake 将number同时运行食谱。

有关更多说明,请参见此处

于 2013-10-17T02:13:11.123 回答
0

使用make -j(正如TheMorph所说)绝对是要走的路。

但是,如果单个 make 进程可以查看构建依赖项并确定要并行化的内容,则此方法效果最佳。听起来你有一个递归的 Makefile 系统,这被认为是有害的(警告:该链接是 PDF)。

通常很难并行运行递归 make,因为顶层 make 并没有真正理解不同子系统之间的依赖关系。

因此,您最好的选择可能是先修复递归 makefile,然后充分利用-j.

是编写非递归 make 系统的示例。请注意,您当前拥有的每个目录中仍然有一个 makefile,并且每个 makefile 仍然管理相同的目标,并且每个子目录仍然可以独立构建。不同之处在于顶层构建将所有子目录 makefile 包含到单个依赖关系图中,这允许它更积极地并行化。

于 2013-10-17T15:25:11.323 回答