С готовым рецептом это выполнимо:
ID-INPUT := $(file < pid.txt)
define CREATE-PHONY-PYTHON =
PHONY: $1
$1:
@echo calling Python with $1
python ./program.py $1
endef
PHONY: all
all: $(ID-INPUT)
$(info $(foreach ID,$(ID-INPUT),$(call CREATE-PHONY-PYTHON,$(ID))))
$(eval $(foreach ID,$(ID-INPUT),$(call CREATE-PHONY-PYTHON,$(ID))))
Вызов $(info)
только для того, чтобы проверить, что генерация рецепта работает, как ожидалось - удалите его, когда в производстве. Распараллеливание должно работать, как и ожидалось, но я не мог это проверить. Вы можете взглянуть на набор инструментов таблицы GNUmake для более сложной обработки конфигурации внутри make.
PS: функция $(file <)
работает только в GNUmake> 4.1, насколько я помню