GNU make: извлечение аргумента для -j в Makefile - PullRequest
22 голосов
/ 14 марта 2011

Я искал час, и эта информация, кажется, нигде не существует ...

Я хотел бы иметь возможность извлечь (и, возможно, использовать) количество запрошенных заданий make ","как передано через опцию -j, или самим Make в случае подмоделей в Makefile.

Самая многообещающая вещь, которую я видел до сих пор, - это переменная $ (MAKEFLAGS), нов моей системе (если я делаю, скажем, make -j2) содержимое этой переменной только "--jobserver-fds = 3,4 -j".Есть ли способ получить фактическое количество заданий, переданных с -j?

Ответы [ 2 ]

13 голосов
/ 14 марта 2011

Извините, но нет способа определить количество параллельных заданий - без написания приложения или скрипта, который сканирует список процессов, чтобы определить параметры вызова.

Проверьте исходный код на http://cvs.savannah.gnu.org/viewvc/make/main.c?revision=1.246&root=make&view=markup. Искать job_slots > 1.

Обновление: если у вас есть контроль над рабочим диапазоном, вы можете обернуть приложение make своей собственной программой / сценарием, проанализировать параметры, установить выделенную переменную среды и впоследствии вызвать исходный make.

11 голосов
/ 09 ноября 2015

На самом деле есть способ полностью реализовать это в вашем make-файле на * nix.

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))

ps, grep также нужно установить, но это почти что дано.Он может быть улучшен для обработки - тоже работа

...