У меня есть промежуточные файлы, которые я хочу сохранить, только если они были успешно созданы.
Вот моя текущая попытка:
all: foo.result
%.result: %.intermediate
cp $^ $@
%.input:
touch $@
%.intermediate: %.input
touch $@
$(if $(FAIL),exit 1)
.PRECIOUS: %.intermediate
.DELETE_ON_ERROR: %.intermediate
clean:
rm -f *.intermediate *.input *.result
Чтобы до боли понять, чего я добиваюсь, запустите это и попробуйте не выводить:
(make clean && make foo.result) |&> /dev/null; if [[ ! -e foo.intermediate ]]; then echo "make removed precious intermediate file"; fi; (make clean && make foo.result FAIL=1) |&> /dev/null; if [[ -e foo.intermediate ]]; then echo "make did not remove corrupt file"; fi;