मेकफाइल में% प्रतीक का क्या अर्थ है


11

मैं मेकफाइल्स के साथ खेल रहा हूं और मैं % .o या % .c पर आया हूं । मैंने जो कुछ भी समझा, उसमें से सभी c या o फाइलें निर्दिष्ट हैं । लेकिन यह काम क्यों:

%.o: %.c
        $(CC) -c $^  -o $@  

और यह काम नहीं करता है

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

दोनों अभिव्यक्ति सभी फाइलों को निर्दिष्ट करती हैं। तो क्या % .o: प्रतीक मेक फाइल करता है?

जवाबों:


9

दोनों अभिव्यक्ति सभी फाइलों को निर्दिष्ट करती हैं।

नहींं, पहला नियम बताता है makeकि .oसंबंधित .cफ़ाइल दी गई फ़ाइल को कैसे प्राप्त किया जाए । एकवचन नोट करें: एक एकल फ़ाइल।

दूसरा नियम (दावा) बताता है makeकि .oफाइलों का एक गुच्छा कैसे प्राप्त किया जाए , इसी .cफाइलों का एक और गुच्छा दिया जाए । बहुवचन पर ध्यान दें: ग्लोबिंग .cसे उत्पन्न सभी फाइलें *.c

एक साइड नोट पर, %.o: %cएक GNU एक्सटेंशन है।

दूसरे पक्ष पर, आप makeStackOverflow पर उपयोग करना सीखेंगे। आपको इसके बजाय पुस्तक पढ़ने पर विचार करना चाहिए।


आरटीएफएम, वास्तव में मुझे लगा कि स्टैकटेक्चेंज की बात उस मानसिकता को शुद्ध करने के लिए थी।
डकैनोल्स

12

निर्माण:

%.o: %.c
        $(CC) -c $^  -o $@  

एक पैटर्न नियम है , जो एक प्रकार का निहित नियम है। यह एक लक्ष्य और एक निर्भरता को निर्दिष्ट करता है, और $(CC)प्रत्येक लक्ष्य के लिए एक मंगलाचरण का कारण बनता है । जबकि यह:

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

एक मानक नियम है, लेकिन इसमें (संभवतः) कई लक्ष्य और कई निर्भरताएं हैं। फिर भी उस सब के लिए, यह केवल $(CC)एक बार आह्वान करेगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.