다음 메이크파일이 있습니다.
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"
항상 인쇄되기 때문에 다른 것이 업데이트되는 것 같습니다. 이는 웹 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
?
아니면 실제로 업데이트되나요?