2010-05-05 12 views
6

मेरे पास कई सी और सी ++ प्रोजेक्ट हैं जो सभी एक बुनियादी संरचना का पालन करते हैं जो मैं थोड़ी देर के लिए उपयोग कर रहा हूं। मेरी स्रोत फाइल src/*.c में जाती है, obj/*.[do] में इंटरमीडिएट फ़ाइलें, और शीर्ष स्तर निर्देशिका में वास्तविक निष्पादन योग्य।कुछ लक्ष्यों के लिए मेकफ़ाइल निर्भरता उत्पादन छोड़ें (उदा। 'क्लीन`)

मेरे makefiles इस टेम्पलेट मोटे तौर पर का पालन करें:

# 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) 

अब मैं बिंदु जहां मैं एक डेबियन प्रणाली के लिए इस पैकेजिंग कर रहा हूँ पर हूँ। मैं डेबियन स्रोत पैकेज बनाने के लिए debuild का उपयोग कर रहा हूं, और बाइनरी पैकेज बनाने के लिए pbuilder का उपयोग कर रहा हूं। debuild चरण केवल clean लक्ष्य निष्पादित करना है, लेकिन इससे भी निर्भरता फ़ाइलों को उत्पन्न और शामिल किया जा सकता है।

संक्षेप में, मेरा प्रश्न वास्तव में है: क्या मैं किसी भी तरह निर्भरता उत्पन्न करने से रोक सकता हूं जब मैं चाहता हूं कि clean लक्ष्य को चलाने के लिए?

उत्तर

8

समाधान आसान है, -include उत्पन्न नहीं है स्वच्छ अंतर्गत फ़ाइलें:

ifneq ($(MAKECMDGOALS),clean) 
    -include $(DEPFILES) 
endif 
संबंधित मुद्दे