Я переработал большинство файлов Makefile для моего проекта диссертации, чтобы правильно отразить рабочий процесс (Создание правил make для зависимостей между целевыми объектами в подкаталогах проекта). Однако в конкретном подкаталоге (prepare) make  всегда восстанавливает  все цели даже при отсутствии изменений в зависимостях.  Что может быть причиной такого неожиданного поведения?
ПРИМЕЧАНИЕ. sf.done - это реальный файл (типа, который я называю "файлы флагов" ), расположенный в другом подкаталоге и созданный/обновленный после завершения сбора данных (import) - зависимый шаг для цель transform.
подготовить /Makefile:
IMPORT_DIR=../import
prepare: import \
         transform \
         cleanup \
         merge \
         sample
import: $(IMPORT_DIR)/sf.done
transform: transform.done
cleanup: cleanup.done
merge: merge.done
sample: sample.done
transform.done: transform.R import
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
cleanup.done: cleanup.R transform
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
merge.done: merge.R cleanup
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
sample.done: sample.R merge
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
.PHONY: import transform cleanup merge sample clean
# remove intermediate files
clean:
    rm -f tmp*.bz2 *.Rdata .Rout
UPDATE:
IMPORT_DIR = ../import
IMPORT_DONE = $(IMPORT_DIR)/sf.done
prepare: import \
         transform \
         cleanup \
         merge \
         sample
import: import.done
transform: transform.done
cleanup: cleanup.done
merge: merge.done
sample: sample.done
import.done: $(IMPORT_DONE)
    @cd $(IMPORT_DIR) && $(MAKE)
transform.done: transform.R import.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
cleanup.done: cleanup.R transform.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
merge.done: merge.R cleanup.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
sample.done: sample.R merge.done
    @$(RSCRIPT) $(R_OPTS) $<
    @touch [email protected]
.PHONY: import transform cleanup merge sample clean
