我有下面的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"
总是在打印。这不是很好,因为这是调用 web api 的 makefile 的一部分。
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