Как я могу захватить ошибки, и прерывания в GNU делают?

Вы можете получить свой AppID на itunesconnect.apple.com «Управление своими приложениями»

14
задан Jolta 12 April 2017 в 08:45
поделиться

4 ответа

Нет. Обработка сигналов в GNU make уже оставляет желать лучшего. Изнутри своего обработчика сигналов он вызывает такие функции, как printf , которые небезопасно вызывать из обработчика сигналов. Я видел проблемы с этой причиной, например, правила .DELETE_ON_ERROR не всегда выполняются, если stderr перенаправлен на stdout .

Например, на Окно CentOS 7.4:

  1. Создайте следующий Makefile :

     .DELETE_ON_ERROR:
    
    foo:
    коснитесь $ @
     спать 10
    
  2. Откройте его в vim и запустите : make ,

  3. Пока он спит, нажмите Ctrl - C

Vim / make printts

Press ENTER or type command to continue
touch foo
sleep 10
^C
shell returned 130

Interrupt: Press ENTER or type command to continue

Программа Make получила сигнал прерывания, но foo все еще существует.

3
ответ дан 1 December 2019 в 08:53
поделиться

Нет. Насколько мне известно, такой функции нет.

1
ответ дан 1 December 2019 в 08:53
поделиться

make выдает коды возврата. Насколько я сейчас помню, он возвращает 0 в случае успеха, 2 в случае неудачи (пожалуйста, проверьте документацию). Следовательно, будет ли вам достаточно обернуть make, например, внутри сценария оболочки?

Насколько я сейчас помню, он возвращает 0 в случае успеха, 2 в случае неудачи (пожалуйста, проверьте документацию). Следовательно, будет ли вам достаточно обернуть make, например, внутри сценария оболочки?

Насколько я сейчас помню, он возвращает 0 в случае успеха, 2 в случае неудачи (пожалуйста, проверьте документацию). Следовательно, будет ли вам достаточно обернуть make, например, внутри сценария оболочки?

1
ответ дан 1 December 2019 в 08:53
поделиться

Make не поддерживает его, но с помощью приемов BASH можно добиться чего-то подобного.

default: complete

complete: do_mount
        echo "Do something here..."

do_mount:
        mkdir -p "$(MOUNTPOINT)"
        ( while ps -p $$PPID >/dev/null ; do \
                sleep 1 ; \
        done ; \
        unmount "$(MOUNTPOINT)" \
        ) &
        mount "$(MOUNTSOURCE)" "$(MOUNTPOINT)" -o bind

«Размонтировать» запустится после завершения «make». Обычно это удовлетворительное решение, если вы пытаетесь очистить операции, которые могут произойти во время сборки, но не очищаются при выходе "make".

2
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: