1

過去 1 時間以内にタスクが発生していない場合にタスクを実行する 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) $@

.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.

これらの警告を抑制する方法を知っている人はいますか? (またはメイクファイルで定期的なタスクを実行する)

4

3 に答える 3

0

+ 3600 に問題があると思われます。外すとどうなる?

于 2012-05-24T01:36:42.030 に答える
0

私は考えて考えました、そしてそれから愚かで明白な解決策が私を襲いました...

HOUR_FROM_NOW で将来のタイムスタンプを設定する代わりに、リアルタイムを使用して HOUR_AGO_FILE と比較します ...

HOUR_AGO      = $(shell perl -e '($$s,$$m,$$h,$$d,$$M)=localtime(time()-3600); printf("%02d%02d%02d%02d\n",$$M+1,$$d,$$h,$$m);')
HOUR_AGO_FILE      = $(shell mkdir -p .make; touch -t $(HOUR_AGO) .make/hour_ago; echo .make/hour_ago )

.PHONY: externals
externals: $(PROJECTS:%=.make/proj_%)
.make/proj_%: $(HOUR_AGO_FILE)
     $(MAKE) -s $(*F)
     @touch $@
于 2012-05-24T03:07:21.937 に答える