Makefile बनाता hello
है, तो में से किसी एक निष्पादन योग्य main.cpp
, hello.cpp
, factorial.cpp
बदल दिया है। उस विनिर्देश को प्राप्त करने के लिए सबसे छोटा संभव मेकफाइल हो सकता है:
hello: main.cpp hello.cpp factorial.cpp
g++ -o hello main.cpp hello.cpp factorial.cpp
- प्रो: पढ़ने के लिए बहुत आसान है
- con: रखरखाव दुःस्वप्न, C ++ निर्भरता का दोहराव
- con: दक्षता समस्या, हम सभी C ++ को फिर से जोड़ते हैं, भले ही केवल एक ही बदला गया हो
उपरोक्त सुधार के लिए, हम केवल उन C ++ फ़ाइलों को संकलित करते हैं जिन्हें संपादित किया गया था। फिर, हम केवल परिणामी ऑब्जेक्ट फ़ाइलों को एक साथ लिंक करते हैं।
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
main.o: main.cpp
g++ -c main.cpp
hello.o: hello.cpp
g++ -c hello.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
- प्रो: दक्षता मुद्दे को हल करता है
- con: नया रखरखाव दुःस्वप्न, वस्तु फाइलों के नियमों पर संभावित टाइपो
इस पर सुधार करने के लिए, हम सभी ऑब्जेक्ट फ़ाइल नियमों को एक नियम से बदल सकते हैं .cpp.o
:
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
.cpp.o:
g++ -c $< -o $@
- समर्थक: वापस करने के लिए कुछ आसान बनाने के लिए, एक छोटा सा मेफाइल होने के लिए
यहां .cpp.o
नियम यह बताता है कि निर्माण कैसे करना anyfile.o
है anyfile.cpp
।
$<
इस मामले में पहली निर्भरता के लिए मैच, anyfile.cpp
$@
लक्ष्य से मेल खाता है, इस मामले में, anyfile.o
।
Makefile में मौजूद अन्य परिवर्तन हैं:
- G ++ से किसी C ++ कंपाइलर में कंपाइलर को बदलना आसान हो जाता है।
- संकलक विकल्पों को बदलना आसान बनाता है।
- लिंकर विकल्पों को बदलना आसान बनाता है।
- C ++ स्रोत फ़ाइलों और आउटपुट को बदलना आसान बनाता है।
- एक डिफ़ॉल्ट नियम 'ऑल' जोड़ा गया जो आपके आवेदन के निर्माण के प्रयास से पहले आपकी सभी स्रोत फ़ाइलों को सुनिश्चित करने के लिए त्वरित जाँच के रूप में कार्य करता है।