GNU make:在Makefile中将参数提取到-j

JW *_*son 23 gnu-make

我一直在寻找一个小时,这些信息似乎无处可寻......

我希望能够提取(并可能使用)通过-j选项传递的请求make"jobs"的数量,或者在Makefile中通过Make子本身来创建自己.

到目前为止我见过的最有希望的是$(MAKEFLAGS)变量,但在我的系统上(如果我这样做,比如make -j2),这个变量的内容只是"--jobserver-fds = 3,4 -j".有没有办法让-j传递的实际工作数量?

Rap*_*sek 13

对不起,但没有办法确定并行作业的数量 - 没有编写扫描进程列表的应用程序或脚本来识别调用参数.

查看http://cvs.savannah.gnu.org/viewvc/make/main.c?revision=1.246&root=make&view=markup上的源代码.搜索job_slots > 1.

更新:如果您可以控制操作范围,则可以make使用自己的程序/脚本包装应用程序,解析参数,设置专用环境变量并在之后调用原始make.


yas*_*hma 12

实际上有一种方法可以在*nix上的makefile中完全实现它.

MAKE_PID := $(shell echo $$PPID)
JOB_FLAG := $(filter -j%, $(subst -j ,-j,$(shell ps T | grep "^\s*$(MAKE_PID).*$(MAKE)")))
JOBS     := $(subst -j,,$(JOB_FLAG))
Run Code Online (Sandbox Code Playgroud)

ps,grep也需要安装,但它几乎是给定的.它可以进一步改进以处理 - 工作