2011-03-01 23 views
8

जीएनयू-मेक का उपयोग करते समय, मेरे मेकफ़ाइल में कुछ पैटर्न नियम हैं:मेकफ़ाइल पैटर्न नियम विफल रहता है?

%.o:%.c 
    gcc $< -o:[email protected] 

यह नियम मेरे द्वारा जोड़ा गया है।

लेकिन जब मैं करता हूं तो यह एक त्रुटि देता है कि लक्ष्य% बनाने के लिए कोई नियम नहीं है। और लक्ष्य का निर्माण नहीं करता है।

कभी-कभी, यह अन्य व्यवहार भी होता है। जब मैं पहली बार कहता हूं तो यह लक्ष्य का निर्माण नहीं करता है (यह त्रुटि देता है कि लक्ष्य बनाने के लिए कोई नियम नहीं है), लेकिन जब मैं तुरंत कहता हूं, तो यह सही तरीके से निर्माण करता है।

तो जब मैं स्पष्टीकरण प्रत्येक स्रोत फ़ाइल को अलग से निर्दिष्ट करता हूं, तो यह लक्ष्य को पहली बार ठीक बनाता है।

संपादित करें: मैं एक केंद्र पर जीएनयू-मेक का उपयोग कर रहा हूं (v6.3 मुझे लगता है, यकीन नहीं है)। क्या यह कुछ अनुमति/उपयोगकर्ता आईडी/समूह आईडी समस्या हो सकती है?

कोई संकेतक यह समझने के लिए कि क्या हो रहा है और इसके लिए समाधान क्या हो सकता है?

धन्यवाद, -AD।

+0

यहां एक ही समस्या होने के कारण। ईश्वर, मैं __hate__ मेकफ़ाइल और उनके बेवकूफ वाक्यविन्यास और मनमाने ढंग से सीमाएं। – antred

उत्तर

2

आपको अपने नियम की पहली पंक्ति में : के आसपास की जगहों की आवश्यकता हो सकती है। इसके अलावा, gcc आउटपुट फ़ाइल नाम से पहले एक कोलन नहीं लेता है; बस -o [email protected] का उपयोग करें।

+0

@ ओके वे मेरे टाइपो हैं। मेकफ़ाइल में कोई त्रुटि नहीं है। फिर भी समस्या बनी रहती है .. – goldenmean

+0

क्या आप अपने लक्ष्य पर 'make -d' आज़मा सकते हैं? यह बहुत सारे आउटपुट को फैलाता है, लेकिन आप देख सकते हैं कि यह कौन से नियमों का प्रयास कर रहा है और शायद यह देख रहा है कि क्या गलत हो रहा है। यदि आप सोचते हैं कि इससे समस्या का निदान करने में मदद मिलेगी तो आप परिणाम भी पोस्ट कर सकते हैं। –

12

केवल फ़ॉलबैक के रूप में पैटर्न नियम का उपयोग करें। उदाहरण के लिए:

$ ls 
Makefile 
$ cat Makefile 
%.o: %.c 
    gcc $< -o [email protected] 
$ make 
make: *** No targets. Stop. 

यह ठीक है। पैटर्न पैटर्न पर विचार न करें क्योंकि आपने इसे कुछ भी करने के लिए नहीं कहा है, और मेकफ़ाइल में कोई डिफ़ॉल्ट लक्ष्य नहीं है। आइए इसे ऐसा कुछ करने के लिए कहें जो पैटर्न नियम का उपयोग कर सके।

$ make 1.o 
make: *** No rule to make target `1.o'. Stop. 

अपेक्षित। 1.c मौजूद नहीं है, इसलिए पैटर्न नियम पर विचार नहीं किया जाता है। चलो फिर से कोशिश करें।

$ touch 1.c 
$ make 1.o 
gcc 1.c -o 1.o 

(और फिर मुख्य होने के बारे में कुछ त्रुटि)।

व्यक्तिगत रूप से मैं इन फॉलबैक नियमों को गंभीरता से नापसंद करता हूं। मैं लक्ष्य को स्पष्ट रूप से सूचीबद्ध करना पसंद करता हूं।

file.o file2.o f.o: %.o: %.c 
    ... 

आपको कुछ लक्ष्य विशिष्ट पैटर्न नियम देता है। ये काफी अलग हैं (मैनुअल देखें)। [ओह, और पैटर्न आपको इस नोडी उदाहरण में कोई फायदा नहीं देता है।]

0

बस इस समस्या से गुजर गया।

इस अपने नियम है:

%.o:%.c 
    gcc $< -o:[email protected] 

सुनिश्चित करें कि आप एक टैब और नहीं जीसीसी से पहले दूसरी पंक्ति पर रिक्त स्थान है कि सुनिश्चित करें। मुझे पता लगाने के लिए कुछ घंटे लगे। भी ध्वज के बाद कोई ':' नहीं, जैसा कि किसी और ने बताया।

0

क्या आप सुनिश्चित हैं कि .c फ़ाइल मौजूद है? मुझे लगता है कि पहले सुझाए गए डीडी को डीबग करने में मदद करनी चाहिए।

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