이 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"항상 인쇄되기 때문에 다른 것이 업데이트되는 것 같습니다. 이는 웹 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?

아니면 실제로 업데이트되나요?

관련 정보