【发布时间】:2021-01-29 17:23:03
【问题描述】:
我有一段时间面临这个问题:
make [1]: *** read jobs pipe: Resource temporarily unavailable. Stop.
我有一个顶级 makefile,它根据规则“调用”额外的 cmake 和 make。
target A 是一个相对较小的代码 (C/C++)。 target B 要大得多。
该问题主要发生在构建target B 期间,但并非总是如此。我使用 make 3.82。
我已经尝试使用 make 4.3 并且它总是发生。
这是我的构建系统的骨架:
MAKEFLAGS = --jobs=10 --max-load=20
<target A>:
+. /usr/share/Modules/init/bash &&
module load <target> &&
cmake --build <project buildsystem> --target <target A>
<target B>: <target A>
+. /usr/share/Modules/init/bash &&
module load <target> &&
make -C <path> <target B> &&
cmake --build <project buildsystem> --target <target B>
/usr/share/Modules/init/bash
当特定于 shell 的初始化脚本被引入到 shell 时,模块包和模块命令被初始化。该脚本将模块命令创建为别名或函数,并创建模块环境变量。
https://modules.readthedocs.io/en/latest/module.html
(--max-load 等于构建服务器上的内核数。--jobs 是它的一半。)
我已验证 MAKEFLAGS 正确通过(我已在构建期间检查了 gcc/g++ 进程的数量)并且我没有收到此警告:
warning: -jN forced in submake: disabling jobserver mode.
主机操作系统:RedHat 7.6
cmake: 3.16.4
我该如何解决这个问题?
【问题讨论】:
标签: makefile cmake build module