make始终重建Makefile目标

时间:2014-05-30 13:55:06

标签: r makefile dependencies workflow

我为论文项目重新设计了大多数Makefile文件,以便正确反映工作流程(Creating make rules for dependencies across targets in project's sub-directories)。但是,在特定的子目录(prepare)中,make 始终重建所有目标,即使依赖项没有变化也是如此。 这种意外行为可能是什么原因?

注意:sf.done是一个真实的文件(类型,我称之为"标记文件"),位于不同的子目录中,并在完成数据收集后创建/更新({ {1}}) - 目标import的相关步骤。

准备/生成文件:

transform

更新

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 $@

cleanup.done: cleanup.R transform
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

merge.done: merge.R cleanup
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

sample.done: sample.R merge
    @$(RSCRIPT) $(R_OPTS) $<
    @touch $@

.PHONY: import transform cleanup merge sample clean

# remove intermediate files
clean:
    rm -f tmp*.bz2 *.Rdata .Rout

1 个答案:

答案 0 :(得分:5)

您已将目标import transform cleanup merge sample clean宣布为.PHONY。这意味着make总是认为它们已经过时了。

然后,您声明各种.done目标依赖于.PHONY个目标。由于虚假目标始终被视为过时,因此始终需要更新那些.done目标,并始终触发食谱。