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

我有一个编译工作,其中链接需要大量的IO工作.我们有大约十几个核心,所以我们运行make -j13,但是当涉及链接6个目标时,我希望这些是以循环方式完成的.我想过让一个人依赖下一个,但我认为这会打破个人目标.任何想法如何解决这个小问题? 最佳答案 使自己不提供一种机制来请求“其中的N个,但一次不超过M个”.

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

缺点是你可能会遇到这样一种情况:你的13个作业槽中有5个与sem实例捆绑在一起,这些实例都在等待链接器进程完成.根据构建的结构,这可能意味着浪费了CPU时间.仍然击败了6个连接器,同时颠倒了磁盘,但是:-)

点赞