指定编号的 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
开关。
从各种来源 (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
开关。