多线程以执行多个makefile

时间:2013-10-17 01:11:43

标签: multithreading makefile

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

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

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

如果有可能,该怎么办呢?

2 个答案:

答案 0 :(得分:7)

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

有关详细说明,请参阅here

答案 1 :(得分:0)

使用make -j(正如TheMorph所说)绝对是可行的方法。

但是,如果单个make进程可以看到构建依赖关系并找出要并行化的内容,那么这种方法效果最好。听起来你有一个递归的Makefile系统,它是considered harmful(警告:该链接是PDF)。

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

所以,你最好的选择可能是首先修复递归的makefile,然后充分利用-j

This是编写非递归make系统的一个例子。请注意,在当前有一个目录的每个目录中仍然有一个makefile,并且每个makefile仍然管理相同的目标,并且每个子目录仍然可以独立构建。区别在于顶层构建将所有子目录makefile包含在一个依赖关系图中,这使得它可以更加积极地进行并行化。