2010-08-16 11 views
54

मुझे लगता है कि यह एक सवाल है कि कई बार कहा गया है, लेकिन मैं सही तरह से यह करने के लिए नहीं मिल सकता है।उप-निर्देशिकाएं और Makefiles

project/ 
project/Makefile 
project/code 
project/code/*.cc 
project/code/Makefile 

जब मैं निर्देशिका 'परियोजना/कोड' में हूं और फोन मेरे कोड सही तरीके से संकलन है "project_code बनाने":

मैं निम्नलिखित संरचना है।

मुझे लगता है कि जब मैं में हूँ 'परियोजना /', बस आप को "project_code बनाने" के रूप में अगर मैं 'परियोजना/कोड' में था करना चाहते हैं।

makefile 'परियोजना/Makefile' और जैसे मैं 'परियोजना/कोड' में था कुछ नियमों को संकलित करने (जैसे 'स्थापित' के रूप में) अन्य नियमों में शामिल होंगे। और इसके लिए, मैं आपकी मदद का अनुरोध कर रहा हूं ... धन्यवाद।

उत्तर

78

सबसे आसान तरीका करने के लिए है एक फ़ाइल जिसे बनाया जाना आवश्यक है, और -C ध्वज निर्देशिका में परिवर्तन इंगित करता है (cd code चलाने के समतुल्य make पर कॉल करने से पहले)। आप code मेकफ़ाइल में अन्य लक्ष्यों को कॉल करने के लिए एक ही दृष्टिकोण का उपयोग कर सकते हैं।

उदाहरण के लिए:

clean: 
     $(MAKE) -C $(CODE_DIR) clean 
+0

धन्यवाद, यह काम करता है! एक आखिरी बात: $ (मेक) हमेशा परिभाषित है? –

+0

जीएनयू के तहत, हाँ। –

+2

$ (MAKE) आपके द्वारा परिभाषित एक चर के संदर्भ है? या यह एक ऐसा कार्य है जो हमेशा वहां रहता है? – mtmurdock

0

परियोजना में इस नियम डालने की कोशिश करो/Makefile (जीएनयू के लिए बनाने के) कुछ इस तरह:

CODE_DIR = code 

.PHONY: project_code 

project_code: 
     $(MAKE) -C $(CODE_DIR) 

.PHONY शासन का मतलब है कि project_code नहीं है:

 
.PHONY: project_code 
project_code: 
     cd code && make 
+14

यह *, काम नहीं करेगा * के रूप में लिखा क्योंकि जीएनयू में डिफ़ॉल्ट रूप से बनाने के लिए, एक नियम के शरीर के प्रत्येक पंक्ति एक भिन्न खोल में मार डाला गया है। तो, सीडी होगा, लेकिन इसे खोलने वाला खोल तुरंत बाहर निकल जाएगा; फिर 'मेक' को अलग से निष्पादित किया जाएगा। असल में, मेरा मानना ​​है कि यह एक अनंत रिकर्सन लूप में डाल देगा। हालांकि, अगर आप कोड को 'सीडी कोड और' मेक 'में बदलते हैं, तो यह अपेक्षित काम करेगा। –

+4

सुझाव को पूरा करने के लिए 4 वर्षों के बाद संपादित किया गया –

+2

@EmanueleCipolla आत्मा को सलाम करने के लिए चार साल बाद थंब। – h9uest

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

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