Make
為什麼這個makefile命令執行如此頻繁
我有下面的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
執行
ls -l data/vix.csv
以查看 的實際時間戳data/vix.csv
。它是否反映了您上次執行 make 並看到該
downloading fresh data and updating vix.csv
消息的時間?還是它反映了源材料的時間戳,從哪裡
Rscript update_csv.R
獲得?或者它實際上是否得到了更新?