问题是构建我们的应用程序需要大量时间(20-30 分钟)。
大约有5000多个文件,代码分为各个子系统,可以独立构建。每个子系统都有自己的 makefile。
我的问题是:是否可以为每个 makefile 创建一个线程,以便并行构建所有子系统,然后运行一个 makefile 将它们全部合并?
如果可能,如何进行?
问题是构建我们的应用程序需要大量时间(20-30 分钟)。
大约有5000多个文件,代码分为各个子系统,可以独立构建。每个子系统都有自己的 makefile。
我的问题是:是否可以为每个 makefile 创建一个线程,以便并行构建所有子系统,然后运行一个 makefile 将它们全部合并?
如果可能,如何进行?
您可以使用 make 的并行功能。使用-j number
make 将number
同时运行食谱。
有关更多说明,请参见此处。
使用make -j
(正如TheMorph所说)绝对是要走的路。
但是,如果单个 make 进程可以查看构建依赖项并确定要并行化的内容,则此方法效果最佳。听起来你有一个递归的 Makefile 系统,这被认为是有害的(警告:该链接是 PDF)。
通常很难并行运行递归 make,因为顶层 make 并没有真正理解不同子系统之间的依赖关系。
因此,您最好的选择可能是先修复递归 makefile,然后充分利用-j
.
这是编写非递归 make 系统的示例。请注意,您当前拥有的每个目录中仍然有一个 makefile,并且每个 makefile 仍然管理相同的目标,并且每个子目录仍然可以独立构建。不同之处在于顶层构建将所有子目录 makefile 包含到单个依赖关系图中,这允许它更积极地并行化。