Search code examples
makefilegnu-makeonerrorlockfile

In Makefile, how to cleanup lockfile files?


In GNU Make 3.81, I need to remove a lockfile in the event of an error in any part of the toolchain. Is there a special target that will allow me to do this? Do I need to write a wrapper script?

In the example below, I need unlock_id to happen if the rule for file.out fails.

Thanks! -Jeff

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

Solution

  • I would do the lock/unlock in the same target as file-maker:

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

    This executes the file-maker and unlock steps in the same shell, saving the status of file-maker so make will fail if file-maker fails.