为什么这个 makefile 命令运行得如此频繁

为什么这个 makefile 命令运行得如此频繁

我有下面的 makefile。

data/vix.csv但是,为什么当我运行时,目标的规则总是执行make

在一个最近对SO的回答,有人向我展示了如何以last_updated.txt24 小时为间隔进行更新,即使我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它来自哪里?

或者它真的得到更新了吗?

相关内容