2010-07-24 22 views
10

मुझे यकीन नहीं है कि यह gmake या gcc है जिसे मैं यहां नहीं समझता।निर्भरता फ़ाइलों को हटाने

मैं यूनिट परीक्षण फ्रेमवर्क के लिए निर्भरता नियम उत्पन्न करने के लिए -एमएम और -एमडी विकल्पों का उपयोग कर रहा हूं। विशेष रूप से:

$(TEST_OBJ_DIR)/%.d: $(TEST_SRC_DIR)/%.cpp 
    @$(CPPC) -MM -MD $< -o [email protected] 
    @sed -i -e 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(TEST_OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1.o:|' [email protected] 

-include $(TEST_DEP_FILES) 

जब मैं make चलाने के लिए, के बाद सभी बाइनरी जुड़े हुए हैं (ठीक से), मैं निम्नलिखित अतिरिक्त (अस्पष्टीकृत) लाइन से पहले रास्ते बनाने देखें

rm test/obj/dice.d test/obj/regex.o test/obj/inventoryContainer.d test/obj/color-string.d test/obj/dice.o test/obj/inventoryContainer.o test/obj/color-string.o test/obj/regex.d 

जहां से कि rm आदेश आ रहा है? केवल जगह - कहीं - मेरे पास है कि मेरी makefile में एक rm आदेश साफ निर्देश

test-clean: 
    rm -f $(TEST_BIN_FILES) 
    rm -f $(TEST_OBJ_DIR)/*.{a,d,o} 

कोई भी विचार में है?

उत्तर

10

मेक स्वचालित रूप से intermediate files बना देगा यदि आवश्यक दो नियमों को एक साथ करने के लिए आवश्यक है, लेकिन यह निर्माण के अंत में उन्हें हटा देगा। आप इसे उन्हें निकालने से रोकने के लिए .PRECIOUS विशेष लक्ष्य का उपयोग कर सकते

+1

या। सिक्योरिटी ... – reinierpost

+0

@rei आह, हाँ। मुझे पता था कि 'सिकेंडरी' ने फ़ाइलों को मध्यवर्ती के रूप में इलाज करने के लिए मजबूर किया, लेकिन मुझे नहीं पता था कि यह उन्हें हटाने से भी रोक दिया गया है –

0

समस्याओं के इन प्रकार डीबगिंग के लिए एक उपयोगी विकल्प -n स्विच है:

make -n {TARGET} 

यह आप आदेशों को इसे चलाने होगा, लेकिन जीत दिखाएगा वास्तव में उन्हें चलाने के लिए नहीं। यह आपको यह देखने देता है कि कौन से नियम फायरिंग कर रहे हैं लेकिन आपको वह अतिरिक्त आउटपुट नहीं देता है जो समस्या का निदान करना मुश्किल बनाता है।

डीडी डीबग ध्वज भी उपयोगी हो सकता है लेकिन इसे एक संदर्भ में चलाने के लिए सुनिश्चित रहें जहां आप आसानी से स्क्रॉल कर सकते हैं, आपको बहुत अधिक उत्पादन मिल जाएगा। मैं आमतौर पर emacs खोल मोड का उपयोग करता हूं क्योंकि इसमें अच्छी खोज कार्यक्षमता है और बफर बचाता है।

संबंधित मुद्दे