На данный момент GNU make не имеет встроенной поддержки.
Однако существует надежный обходной путь:
.PHONY: internal-target external-target
external-target:
bash -c "trap 'trap - SIGINT SIGTERM ERR; <DO CLEANUP HERE>; exit 1' SIGINT SIGTERM ERR; $(MAKE) internal-target"
internal-target:
echo "doing stuff here"
Это ловит прерывания, завершения и любые ненулевые коды выхода.
Обратите внимание на $(MAKE)
, так что cmdline переопределяет и делает опции переданными в submake.
В ловушке:
- Очистить обработчик ловушек (с -)
- сделать уборку
- выход с ненулевым состоянием выхода, поэтому инструменты автоматизации сборки сообщают о сбое сборки.
DELETE_ON_ERROR НЕ работает для каталогов, поэтому это ключ для очистки после mktemp -d
, например
Заменить <DO CLEANUP HERE>
действительным CMD.