次のメイクファイルがあります。
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
答え1
ls -l data/vix.csv
実際のタイムスタンプを表示するには実行してくださいdata/vix.csv
。
最後に、makeを実行してメッセージを見た時間が反映されますかdownloading fresh data and updating vix.csv
?
それともソース素材のタイムスタンプを反映していますかRscript update_csv.R
?
それとも実際に更新されますか?