我有一個Makefile,如果它在最近一小時內沒有發生,它會執行一項任務。它這樣做是這樣的:在Makefile中抑制未來時間的「時鐘歪斜」警告
HOUR_FROM_NOW = $(shell perl -e '($$s,$$m,$$h,$$d,$$M)=localtime(time()+3600); printf("%02d%02d%02d%02d\n",$$M+1,$$d,$$h,$$m);')
NOW_FILE = $(shell mkdir -p .make; touch .make/now; echo .make/now)
.PHONY: externals
externals: $(PROJECTS:%=.make/proj_%)
.make/proj_%: $(NOW_FILE)
$(MAKE) -s $(*F)
touch -t $(HOUR_FROM_NOW) [email protected]
.PHONY: $(PROJECTS)
$(PROJECTS):
# do stuff, specifically, clone git-repo if not exists, else pull latest
這部分的偉大工程,但我現在得到警告:
make: Warning: File `.make/proj' has modification time 3.5e+03 s in the future
make: Nothing to be done for `externals'.
make: warning: Clock skew detected. Your build may be incomplete.
任何人都知道如何抑制這些警告? (或者在makefile中執行週期性任務)
評論評論我是爲什麼你有shell在子shell命令中啓動命令。通常$()產生一個子shell。是否使文件具體? –
「shell」是一個makefile函數。請參閱http://www.gnu.org/software/make/manual/make.html。它可能看起來像Bash,但有一些顯着的差異。 $(shell ...)在子shell中運行「...」。 $(...)只是對名爲「...」的變量的變量引用 - 而在bash中,$()是子shell語法。 –
這是有道理的,謝謝你的鏈接。 –