Вы можете предоставить свою собственную программу в виде оболочки, которая будет выводить команды и делать все, что вам нужно.
https://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html:
5.3.2 Выбор оболочки
Программа, используемая в качестве оболочки, взята из переменной SHELL
. Если эта переменная не установлена в вашем make-файле, в качестве оболочки используется программа /bin/sh
. Аргументы, переданные в оболочку, берутся из переменной .SHELLFLAGS
. Значение по умолчанию .SHELLFLAGS
обычно -c
или -ec
в режиме, соответствующем POSIX.
Итак, запустите:
SHELL=mysneakyprogram make all
Каждая команда будет передана mysneakyprogram
с аргументом -c
.
Подвох: это также относится к обычным командам, которые строят цели, а не только $(shell ...)
; Я не думаю, что вы можете различить два случая.