【发布时间】:2020-02-08 05:07:37
【问题描述】:
下面我复制了一个 Makefile 示例,用于执行一些脚本来清理和合并数据。
这种 Makefile 格式要求我列出每个目标文件两次:一次在 all 下,一次作为每个配方的目标。随着 makefile 变长,我有时会忘记在创建新配方后向all 添加新目标。
如果没有all 变量,Make 只会构建第一个目标及其先决条件。
如何从我的 Makefile 中删除这个重复源,并且如果它们的先决条件发生变化,仍然检查并重建所有配方目标?
DIR_DATA = ./data
DIR_RAW = $(DIR_DATA)/raw
DIR_MUNGE = ./munge
VPATH = $(DIR_RAW) $(DIR_DATA) $(DIR_MUNGE)
########################################################
####################### Recipes ########################
########################################################
ds_mtcars.rds: ds_mtcars.R ds_mt_raw.csv
Rscript $<
ds_mt_agg.rds: ds_mt_agg.R ds_mtcars.rds
Rscript $<
ds_mt_temp.rds: ds_mt_temp.R ds_mtcars.rds ds_mt_agg.rds
Rscript $<
########################################################
####################### Phony vars #####################
########################################################
.Phony: all
all: ds_mtcars.rds ds_mt_agg.rds ds_mt_temp.rds
clean:
rm -f ./data/*.rds
【问题讨论】:
标签: makefile