不管 --jobs 是什么,GNU Make 只使用 4 个线程

GNU Make only uses 4 threads no matter what --jobs is

无论我传递什么 --jobs 参数,我总是得到 4 个线程。

make --jobs=1 target 期间,我可以看到以 make[1]:make[2]:make[3]:make[4]: 开头的标准输出行,而我只希望有一个线程。

如果我使用 make --jobs=100 target,结果相同,我得到 4 个线程而不是 100 个。

我不确定这是否相关,但我 运行 在 docker 容器中创建 docker 我的 7 个本地主机核心可用。

>docker info
Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 7

在 Alpine Linux docker 容器内

>make --version
GNU Make 4.2.1
Built for x86_64-alpine-linux-musl

>grep -c ^processor /proc/cpuinfo
7

确认容器获得 7 个内核。

有什么我可以 运行 帮助我缩小 make 行为的原因的范围吗?

我认为有些混乱:make 之后的数字不是线程号。 Make实际上不是多线程的,它是单线程的。

该数字是正在调用的递归生成过程的深度。无论您的 -j 值有多大(或多小),它总是会显示完全相同(给定相同的目标),因为它表示已调用了多少个 make 的递归实例。

也就是说,如果你有类似的东西:

recurse:
        $(MAKE) ...

那么来自 make 的顶级实例的消息将是 make,而来自 recurse 配方调用的子 make 的消息将是 make[1],等等