Как перехватить сигнал выхода (ctrl + c) в Makefile? - PullRequest
1 голос
/ 15 июня 2019

Я пытаюсь перехватить сигнал выхода (ctrl + c), чтобы выполнить некоторые действия по очистке.

В скрипте оболочки я следовал за приведенной ниже функцией, чтобы поймать в ловушку,

#To trap ctrl-c signals
trap ctrl_c INT

#To trap exit signals
trap on_exit EXIT

function ctrl_c() {
    echo "exited by user"
    exit
}

function on_exit() {
    echo "exited by user"
    exit
}

Как мне добиться того же в Makefile?

1 Ответ

1 голос
/ 15 июня 2019

Вы не можете перехватывать сигналы в make. Попробуйте использовать .INTERMEDIATE для очистки и прочитайте 5.6 Прерывание или уничтожение make

all: test.out

test.out: test.tmp
    sleep 10

test.tmp:
    echo x>test.tmp

.PHONY: all

.INTERMEDIATE: test.tmp

Make ловит сигнал прерывания и удаляет такие файлы, если они являются частью графика и не существовали до запуска:

$ make
echo x>test.tmp
sleep 10
make: *** [Makefile:4: test.out] Interrupt
make: *** Deleting intermediate file 'test.tmp'

Если вам действительно нужно выполнить какую-то программу при выходе из make, создайте фоновый процесс при инициализации некоторой переменной и дождитесь завершения основного процесса make:

DUMMY := $(info launching the moniror process...)$(shell some-command& )
...