जीसीसी एक सी संकलक है: यह एक सी लेता है स्रोत फ़ाइल और मशीन कोड बनाता है, या तो अनलिंक ऑब्जेक्ट फ़ाइलों के रूप में या एक वास्तविक निष्पादन योग्य प्रोग्राम के रूप में, जो सभी ऑब्जेक्ट मॉड्यूल और पुस्तकालयों से जुड़ा हुआ है।
मेक एक परियोजना की निर्माण प्रक्रिया को नियंत्रित करने के लिए उपयोगी है। एक सामान्य सी प्रोग्राम में कई मॉड्यूल (। सी) और हेडर फाइलें (.h) होती हैं। कुछ भी बदलने के बाद हमेशा सबकुछ संकलित करने में समय लगेगा, इसलिए बदलाव को केवल उन हिस्सों को संकलित करने के लिए डिज़ाइन किया गया है जिन्हें परिवर्तन के बाद फिर से संकलित करने की आवश्यकता है।
यह प्रोग्रामर द्वारा बनाए गए नियमों का पालन करके करता है। उदाहरण के लिए:
foo.o: foo.c foo.h
cc -c foo.c
यह नियम यह बताता है कि फ़ाइल foo.o फ़ाइलों foo.c और foo पर निर्भर करती है।एच, और यदि उनमें से कोई भी बदलता है, तो इसे दूसरी पंक्ति पर कमांड चलाकर बनाया जा सकता है। (उपर्युक्त वास्तविक वाक्यविन्यास नहीं है: एक टीएबी अक्षरों द्वारा इंडेंट किए गए आदेशों को बनाना चाहते हैं, जिन्हें मैं इस संपादन मोड में नहीं कर सकता। कल्पना कीजिए कि यह वहां है, हालांकि।)
आमतौर पर एक फ़ाइल से अपने नियम पढ़ता है मेकफ़ाइल कहा जाता है। चूंकि ये फ़ाइलें हाथ से लिखी गई हैं (पारंपरिक रूप से), नियमों को छोटा करने के लिए बहुत सारे जादू बनाते हैं। उदाहरण के लिए, यह जानता है कि foo.o को foo.c से बनाया जा सकता है, और यह जानता है कि ऐसा करने का आदेश क्या है। इस प्रकार, ऊपर शासन इस के लिए छोटा किया जा सकता है:
foo.o: foo.h
एक छोटा सा तीन मॉड्यूल से मिलकर कार्यक्रम इस तरह की एक Makefile हो सकता है:
mycmd: main.o foo.o bar.o
$(CC) $(LDFLAGS) -o mycmd main.o foo.o bar.o
foo.o: foo.h bar.h
bar.o: bar.h
मेकअप से अधिक सिर्फ कार्यक्रमों संकलन कर सकते हैं।
clean:
rm -f *.o core myapp
एक और नियम बनाये जा सकते हैं परीक्षण: एक ठेठ Makefile अवांछित फ़ाइलों को साफ करने के लिए एक नियम होगा
check: myapp
./myapp <test.input> test.output
diff -u test.correct test.output
एक Makefile might "का निर्माण" प्रलेखन: एक उपकरण चलाने के कुछ मार्कअप से प्रलेखन कन्वर्ट करने के लिए उदाहरण के लिए, एचटीएमएल और पीडीएफ की भाषा।
एक मेकफ़ाइल के पास उस बाइनरी प्रोग्राम की प्रतिलिपि बनाने के लिए एक इंस्टॉल नियम हो सकता है जहां यह उपयोगकर्ता या सिस्टम व्यवस्थापक इसे स्थापित करना चाहता है।
और इसी तरह। चूंकि मेक सामान्य और शक्तिशाली है, इसलिए आमतौर पर पूरी प्रक्रिया को स्वचालित रूप से स्रोत टारबॉल को उस बिंदु पर अनपॅक करने से स्वचालित किया जाता है जहां सॉफ़्टवेयर उपयोगकर्ता द्वारा उपयोग किए जाने के लिए तैयार होता है।
अगर आप इसे पूरी तरह से सीखना चाहते हैं तो इसके बारे में जानने के लिए बहुत कुछ है। बनाने के जीएनयू संस्करण में विशेष रूप से अच्छा प्रलेखन है: http://www.gnu.org/software/make/manual/ में यह विभिन्न रूपों में है।
यह ध्यान दिया जाना चाहिए कि जावैक में कुछ प्राथमिक निर्भरता संकल्प शामिल है, यानी यह एक साधारण मेक भी है। यह अन्य वर्गों द्वारा उपयोग की जाने वाली कक्षाओं (स्रोतों) की पुनरावृत्ति की तलाश करेगा और आवश्यकता होने पर उन्हें संकलित करेगा, भले ही उन्हें तर्क के रूप में वर्णित नहीं किया गया हो। सी कंपाइलर या लिंकर्स ऐसा नहीं करते हैं, आंशिक रूप से क्योंकि एक तरफ ऑब्जेक्ट फ़ाइल resp लाइब्रेरी के बीच कनेक्शन और जावा में जिस तरीके से वे कर सकते हैं, उससे अनुमान नहीं लगाया जा सकता है, जहां भौतिक फ़ाइल नाम और पथ तार्किक वर्ग के नाम और संकुल से मेल खाते हैं। –