Проблема в том, что ^ C также перехватывается make (когда вы запускаете ^ C, все процессы в группе процессов терминала получают сигнал), и make завершает работу (после очистки), поэтому он никогда не пытается запустить какой-либобольше команд, как если бы вы вводили ^ C во время процесса make.
Единственный способ избежать этого - убедиться, что make вообще не получил SIGINT, и единственный способ сделать это.то есть изменить группу процессов.Я не уверен, есть ли какая-нибудь удобная утилита, которая сделает это за вас.
Моя рекомендация - не пытаться вызывать отладчики или другие интерактивные программы из рецепта make.Он не предназначен для этого.В дополнение к вышеперечисленным проблемам, вы обнаружите, что если вы попытаетесь запустить с включенными параллельными сборками, то, поскольку только один процесс может получить стандартный ввод из терминала, будет выбран случайный, чтобы получить «настоящий» стандартный ввод, а другиезакройте их stdin или прочитайте из / dev / null или еще чего-нибудь.
Вместо этого, почему бы просто не создать сценарий оболочки для отладки, который будет запускать необходимые команды make, а затем вызывать gdb.Этот сценарий оболочки может использовать trap
для перехвата SIGINT и игнорирования его, чтобы всегда выполнять очистку.