2010-05-05 91 views
6

我有幾個C和C++項目,它們都遵循我已經使用了一段時間的基本結構。我的源文件進入src/*.c,中間文件obj/*.[do],以及頂層目錄中的實際可執行文件。跳過某些目標的makefile依賴關係生成(例如`clean`)

我的makefile文件大致遵循此模板:

# The final executable 
TARGET := something 
# Source files (without src/) 
INPUTS := foo.c bar.c baz.c 

# OBJECTS will contain: obj/foo.o obj/bar.o obj/baz.o 
OBJECTS := $(INPUTS:%.cpp=obj/%.o) 
# DEPFILES will contain: obj/foo.d obj/bar.d obj/baz.d 
DEPFILES := $(OBJECTS:%.o=%.d) 

all: $(TARGET) 

obj/%.o: src/%.cpp 
    $(CC) $(CFLAGS) -c -o [email protected] $< 

obj/%.d: src/%.cpp 
    $(CC) $(CFLAGS) -M -MF [email protected] -MT $(@:%.d=%.o) $< 

$(TARGET): $(OBJECTS) 
    $(LD) $(LDFLAGS) -o [email protected] $(OBJECTS) 

.PHONY: clean 
clean: 
    -rm -f $(OBJECTS) $(DEPFILES) $(RPOFILES) $(TARGET) 

-include $(DEPFILES) 

現在我在哪裏,我這包裝爲Debian系統的地步。我使用debuild來構建Debian源代碼包,並使用pbuilder來構建二進制包。 debuild步驟只需執行clean目標,但即使這樣也會生成幷包含依賴文件。

總之,我的問題是:當我想要運行clean目標時,能否以某種方式防止生成依賴關係?

回答

8

這種方案很容易,不-include下產生的乾淨文件:

ifneq ($(MAKECMDGOALS),clean) 
    -include $(DEPFILES) 
endif