В Makefile, как очистить файлы lockfile? - PullRequest
7 голосов
/ 02 июля 2011

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

В приведенном ниже примере мне нужно, чтобы unlock_id выполнялся, если не выполняется правило для file.out.

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

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 ]

7 голосов
/ 04 июля 2011

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

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

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

4 голосов
/ 02 июля 2011

Это своего рода клудж, но это работает:

all:
        @$(MAKE) file.out || $(MAKE) unlock_id
0 голосов
/ 02 июля 2011

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

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

РЕДАКТИРОВАТЬ

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

...