获取makefile中的当前作业号

时间:2013-05-21 11:57:24

标签: parallel-processing makefile

有没有办法获取当前作业号以在makefile规则中使用?

让我给你一点背景。 我正在使用一个在多个文件上运行的工具。当然,我使用并行作业来加快速度。这里真正的问题是这个工具生成多个线程,我希望它们在单核中运行 - 因为这样它更快。我做了一些测试,它运行速度更快。

我需要job numer来设置与cpu核心的进程关联。

1 个答案:

答案 0 :(得分:1)

无法获得“工作号码”,因为make不会跟踪工作号码。基本上,单个构建中的所有make实例共享相同令牌的列表。当make想要开始一个工作时,它获得一个令牌。当make完成一个作业时,它会将令牌添加回列表。如果它试图获得一个令牌并且一个令牌不可用,它将一直睡到一个可用。令牌没有区别特征,因此无法获得“工号”。

要了解有关GNU如何处理并行构建的更多信息,请阅读http://make.mad-scientist.net/jobserver.html

我不太确定这对你有什么帮助。 Make对线程一无所知,只启动进程。如果单个进程由多个线程组成,make仍然会将其视为单个作业。

编辑: 假设你在make的单个非递归调用中,你可以这样做:

COUNT :=

%.foo :
        $(eval COUNT += x)
        @echo "$@: Number of rules run is $(words $(COUNT))"

all: a.foo b.foo c.foo d.foo