2014-01-31 26 views
0

我有一個makefile我巨大的圖書館,當我修改了一些文件,但不希望編譯庫,並做make clean,首先它會編譯所有的文件,然後做清潔。我怎樣才能使它清潔沒有任何其他修改?如何在沒有任何修改的情況下進行清潔?

我也已經使用了

.PHONY:清潔力
清潔:FORCE
RM *的.o RM * .MOD FORCE:

我可以用我的解決問題:

ifneq($(MAKECMDGOALS),clean)
-include $(OBJS:%O =%d。)
ENDIF

+1

說明請出示你的makefile的內容 – Zhertal

回答

2

由於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

相關問題