我有一个编译工作,其中链接需要大量的IO工作。我们有大约十几个核心,所以我们运行make -j13,但是当涉及链接6个目标时,我希望这些是以循环方式完成的。我想过让一个人依赖下一个,但我认为这会打破个人目标。任何想法如何解决这个小问题?
答案 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)
它不会打破个别目标。
您可以为目标创建任意数量的(:
)规则,只要其中只有一个具有构建它的实际配方。这似乎是一个很好的用例。