指定编号的 Make -j(多个作业)在 QNX 中不起作用

Make -j (multiple jobs) with number specified doesn't work in QNX

从各种来源 (like this) 声明您可以将构建作业与以下内容并行化:

make -j n

其中 n 是职位数量。在带有 GNU Make 3.81 的 QNX 6.5.0 中 我注意到这个数字似乎不起作用。如果我调用 make -j(无编号),将启动大量编译器并充分使用处理器:

CPU states: 80.5% user, 5.0% kernel
CPU  0 Idle: 15.2%
CPU  1 Idle: 13.2%
CPU  2 Idle: 14.7%
Memory: 0 total, 281M avail, page size 4K

      PID   TID PRI STATE    HH:MM:SS    CPU  COMMAND
     8200     2  21 Rcv       0:00:17  12.02% devb-eide
 43565087     1  10 Rdy       0:00:00  11.38% make
 43819103     1  10 Rply      0:00:00   3.01% cmake
 43716678     1  10 Rply      0:00:00   2.80% cmake
 43671611     1  10 Rply      0:00:00   1.87% make
 43589671     1  10 Rply      0:00:00   1.73% make
 43569184     1  10 Rply      0:00:00   1.73% make
 43573283     1  10 Rply      0:00:00   1.46% make
 43667514     1  10 Rply      0:00:00   1.28% make
 43839590     1  10 Send      0:00:00   1.10% cmake

不幸的是,当我使用 make -j 时,有大量并发构建意味着我有限的 VM 很快就会耗尽内存。

但是如果我添加一个数字(例如 make -j 4,它对应于我的 VM 中的内核数),那么它只会启动 1 个进程。这也会发生在以下变体中:

make -j4
make -j 4
make --jobs=4
make --jobs 4

以及其他一些处理器编号(2、3、4、5、6、7、8)。

为什么指定编号的 make -j 在 QNX 中不起作用?

系统中使用的 make 版本必须使用禁用 -j 任务引擎的配置项进行编译。重新编译 GNU Make 3.81 和 4.2 产生了一个二进制文件,它可以成功地使用带有数字的 -j 开关。