我有一个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语法。 –
这是有道理的,谢谢你的链接。 –