我有一個makefile我巨大的圖書館,當我修改了一些文件,但不希望編譯庫,並做make clean
,首先它會編譯所有的文件,然後做清潔。我怎樣才能使它清潔沒有任何其他修改?如何在沒有任何修改的情況下進行清潔?
我也已經使用了
.PHONY:清潔力
清潔:FORCE
RM *的.o RM * .MOD FORCE:
我可以用我的解決問題:
ifneq($(MAKECMDGOALS),clean)
-include $(OBJS:%O =%d。)
ENDIF
我有一個makefile我巨大的圖書館,當我修改了一些文件,但不希望編譯庫,並做make clean
,首先它會編譯所有的文件,然後做清潔。我怎樣才能使它清潔沒有任何其他修改?如何在沒有任何修改的情況下進行清潔?
我也已經使用了
.PHONY:清潔力
清潔:FORCE
RM *的.o RM * .MOD FORCE:
我可以用我的解決問題:
ifneq($(MAKECMDGOALS),clean)
-include $(OBJS:%O =%d。)
ENDIF
由於Zhertal說,有沒有辦法知道肯定沒有看到乾淨規則的定義,至少是。這有兩種可能性。
第一個是你的clean
目標上市,是造成一切重建的先決條件。這是不太可能的,但我看到人們之前做過這樣的事情。
第二,更容易,原因是你正在使用的GNU使手冊中自動生成的先決條件,在這裏你將%.d
模式添加到您的%.o
模式規則,你-include
所有.d
文件中描述的方法。這裏的問題是,使將始終嘗試以確保生成文件是最新第一運行任何目標之前,這意味着試圖重建所有包含.d
文件,這意味着重新編譯所有。
你有兩種選擇來解決這個問題。首先是把include
線內有條件的,所以如果你說make clean
,這樣的事情就不會運行:
ifeq ($(filter clean,$(MAKECMDGOALS)),)
-include $(OBJS:%.o=%.d)
endif
當然,這將不得不進行調整,如果你有更多的清潔型規則(distclean
等)
另一種是返工你做你自動生成的makefile的方式來使用一個更現代,更先進的方法。您可以在Advanced Auto-Dependencies
說明請出示你的makefile的內容 – Zhertal