Make

為什麼這個makefile命令執行如此頻繁

  • January 18, 2022

我有下面的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獲得?

或者它實際上是否得到了更新?

引用自:https://unix.stackexchange.com/questions/686643