В Makefile, как очистить файлы lockfile?

в GNU Make 3.81 мне нужно удалить файл блокировки в случае ошибки в любой части цепочки инструментов. Есть особая цель, которая позволит мне это сделать? Нужно ли писать сценарий-обертку?

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

спасибо! - Джефф!--2-->

all: lock_id file.out unlock_id

file.out: file.in
    file-maker < file.in > $@

lock_id:
    lockfile file.lock

unlock_id:
    rm -rf file.lock

3 ответов


Я бы сделал блокировку / разблокировку в той же цели, что и file-maker:

file.out: file.in
        lockfile $@.lock
        file-maker < $< > $@; \
        status=$$?; \
        rm -f $@.lock; \
        exit $$status

это выполняет file-maker и разблокировки шаги в той же оболочке, сохраняя статус file-maker так make будет выполнена, если file-maker не удается.


Это своего рода kludge, но он работает:

all:
        @$(MAKE) file.out || $(MAKE) unlock_id

вы хотите .DELETE_ON_ERROR target, который позволяет указать файлы, которые будут удалены при ошибках.

http://www.gnu.org/s/hello/manual/make/Special-Targets.html

редактировать

мой плохой, это полуправда. Это позволяет указать, что вы хотите, чтобы файлы были удалены, но для каких из них и при каких обстоятельствах, это до make.