我有下面的 makefile。
data/vix.csv
但是,为什么当我运行时,目标的规则总是执行make
?
在一个最近对SO的回答,有人向我展示了如何以last_updated.txt
24 小时为间隔进行更新,即使我make
经常跑步。结果,@echo "\n\n##### updating last_updated.txt#####\n\n"
当我运行时很少打印make
。
据我所知,这是唯一更新的东西last_updated.txt
。但是还有其他东西修改该文件吗?其他东西似乎在更新它,因为它是第一条规则的唯一依赖项,并且@echo "\n\n######## downloading fresh data and updating vix.csv ##########\n\n"
总是在打印。这不太好,因为这是 makefile 中调用 Web api 的部分。
TS24 := .timestamp24
DUMMY := $(shell touch -d 'yesterday' "$(TS24)")
# update data if it has been 24 hours
data/vix.csv: last_updated.txt
@echo "\n\n######## downloading fresh data and updating vix.csv ##########\n\n"
Rscript update_csv.R
# signal that it's been >24 hours since data download
last_updated.txt: $(TS24)
@echo "\n\n##### updating last_updated.txt#####\n\n"
touch "$@"
.PHONY: run
run:
@echo "\n\n####### running shiny app ###########\n\n"
R --quiet -e "shiny::runApp(launch.browser=TRUE)"
## remove all target, output and extraneous files
.PHONY: clean
clean:
rm -f *~ *.Rout *.RData *.docx *.pdf *.html *-syntax.R *.RData
答案1
运行ls -l data/vix.csv
查看实际时间戳data/vix.csv
。
它是否反映了您上次运行 make 并看到消息的时间downloading fresh data and updating vix.csv
?
或者它是否反映了源材料的时间戳,无论Rscript update_csv.R
它来自哪里?
或者它真的得到更新了吗?