有没有办法获取当前作业号以在makefile规则中使用?
让我给你一点背景。 我正在使用一个在多个文件上运行的工具。当然,我使用并行作业来加快速度。这里真正的问题是这个工具生成多个线程,我希望它们在单核中运行 - 因为这样它更快。我做了一些测试,它运行速度更快。
我需要job numer来设置与cpu核心的进程关联。
答案 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