當前的Makefile有這樣的事情:如何強制運行命令所有的時間
target1 : lib1.a lib2.a
target2 : lib1.a lib3.a
target3 : lib3.a
lib1.a:
$(MAKE) -C sub_dir all
我想改變這個Makefile,這樣無論目標取決於lib1.a
,它始終運行命令「 $(MAKE) -C sub_dir all
「,總是。在上面的例子中,另一個詞,target1和target2將始終運行「$(MAKE) -C sub_dir all
」。有什麼辦法可以做到嗎?
我知道下面不工作:
target1 : lib2.a
$(MAKE) -C sub_dir all
target2 : lib3.a
$(MAKE) -C sub_dir all
target3 : lib3.a
因爲如果lib2.a沒有更新,則該命令不運行。我有一個限制,我只控制lib1.a,我無法改變lib2.a的構建方式。
任何幫助表示讚賞!
[UPDATE]我結束了以下解決方案:
target1 : lib1.a lib2.a
target2 : lib1.a lib3.a
target3 : lib3.a
lib1.a: relay
.PHONY: relay
relay:
$(MAKE) -C sub_dir all
嗨Etan,你指出了GNU幫助說,力不作爲.PHONY高效,但是從你的解釋,似乎對我來說FORCE更好。我誤解了嗎?你能評論我的解決方案嗎?
您可以添加'.PHONY:lib1.a',但這會導致所有目標始終重新鏈接。 – MadScientist 2014-10-06 22:58:34
使目標依賴於某些東西(sub_dir?),而這又取決於lib1.a – 2014-10-06 23:10:35