make:禁用某些目标的并行执行

时间:2011-08-22 16:32:33

标签: makefile parallel-processing

我有一个编译工作,其中链接需要大量的IO工作。我们有大约十几个核心,所以我们运行make -j13,但是当涉及链接6个目标时,我希望这些是以循环方式完成的。我想过让一个人依赖下一个,但我认为这会打破个人目标。任何想法如何解决这个小问题?

2 个答案:

答案 0 :(得分:3)

make本身并没有提供一种机制来请求“其中的N个,但一次不超过M个。”

您可以尝试使用链接器规则配方中GNU parallel包中的sem命令。它的文档有一个example of ensuring only one instance of a tool runs at once。在您的示例中,您允许make一次启动最多13个sem,但一次只能运行一个链接器,而其他一个阻止。

缺点是您可能会遇到这样的情况:make的13个作业位中的5个与sem的实例相关联,这些实例都在等待链接器进程完成。根据构建的结构,这可能意味着浪费了CPU时间。尽管如此,仍然打败了6个连接器颠倒磁盘: - )

答案 1 :(得分:-1)

它不会打破个别目标。 您可以为目标创建任意数量的(:)规则,只要其中只有一个具有构建它的实际配方。这似乎是一个很好的用例。