この 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

答え1

ls -l data/vix.csv実際のタイムスタンプを表示するには実行してくださいdata/vix.csv

最後に、makeを実行してメッセージを見た時間が反映されますかdownloading fresh data and updating vix.csv

それともソース素材のタイムスタンプを反映していますかRscript update_csv.R

それとも実際に更新されますか?

関連情報