मुझे लगता है कि कमांड लाइन तर्कों की थोड़ी आसान हैंडलिंग के साथ बस एक शेल स्क्रिप्ट है।
इसे .make.sh के बजाय रन बनाने के लिए मानक क्यों है
मुझे लगता है कि कमांड लाइन तर्कों की थोड़ी आसान हैंडलिंग के साथ बस एक शेल स्क्रिप्ट है।
इसे .make.sh के बजाय रन बनाने के लिए मानक क्यों है
जवाबों:
सामान्य विचार यह है कि make
(यथोचित) न्यूनतम रीबिल्ड्स का समर्थन करता है - यानी, आप इसे बताते हैं कि आपके कार्यक्रम के कौन से हिस्से अन्य भागों पर निर्भर हैं। जब आप प्रोग्राम के कुछ हिस्से को अपडेट करते हैं, तो यह केवल उन हिस्सों का पुनर्निर्माण करता है जो उस पर निर्भर करते हैं। जब आप शेल स्क्रिप्ट के साथ ऐसा कर सकते हैं, तो यह बहुत अधिक काम होगा (स्पष्ट रूप से सभी फ़ाइलों पर अंतिम-संशोधित तिथियों की जांच करना, आदि) शेल स्क्रिप्ट के साथ एकमात्र स्पष्ट विकल्प हर बार सब कुछ पुनर्निर्माण करना है। छोटी परियोजनाओं के लिए यह एक पूरी तरह से उचित दृष्टिकोण है, लेकिन एक बड़ी परियोजना के लिए एक पूर्ण पुनर्निर्माण आसानी से एक घंटे या उससे अधिक समय ले सकता है - उपयोग करते हुए make
, आप आसानी से एक या दो मिनट में एक ही चीज़ को पूरा कर सकते हैं ...
मुझे शायद यह भी जोड़ना चाहिए कि कम से कम मोटे तौर पर समान क्षमताएं बनाने के लिए काफी कुछ विकल्प हैं। विशेष रूप से ऐसे मामलों में जहां एक बड़ी परियोजना में केवल कुछ फाइलों को फिर से बनाया जा रहा है, उनमें से कुछ (जैसे, निंजा ) अक्सर बनाने के लिए काफी तेज होते हैं।
वहाँ विभिन्न चीजें हैं जो शेल स्क्रिप्ट के साथ करना मुश्किल है ...
सुनिश्चित करें कि जब आप अपने स्रोत फ़ाइलों में परिवर्तन करते हैं, तो केवल आवश्यक फ़ाइलें recompiled हैं।
उदाहरण के लिए:
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
अगर मैं 2.h
केवल फ़ाइल बदलूं और चलाऊंmake
, तो यह सभी 3 कमांड्स को रिवर्स ऑर्डर में निष्पादित करता है।
अगर मैं 1.c
केवल फ़ाइल बदलूं और चलाऊंmake
, तो यह उल्टे क्रम में केवल पहले 2 कमांड निष्पादित करता है।
यह पूरा करने की कोशिश कर रहा है कि आपकी स्वयं की शेल स्क्रिप्ट में बहुत सारी if/else
जाँच शामिल होगी ।
rsync -r -c -I $SOURCE $DEST_DIR
शेल में कुछ इस तरह का उपयोग करें ।
साथ ही उपरोक्त, मेक एक घोषणात्मक (-ish) समानांतर प्रोग्रामिंग भाषा है।
मान लीजिए कि आपके पास कन्वर्ट करने के लिए 4,000 ग्राफिक फाइलें और 4 सीपीयू हैं। एक 10-लाइन शेल स्क्रिप्ट लिखने की कोशिश करें (मैं यहां उदार हो रहा हूं) जो आपके सीपीयू को संतृप्त करते हुए मज़बूती से करेगा।
शायद असली सवाल यह है कि लोग शेल स्क्रिप्ट लिखने से क्यों कतराते हैं।
हैंडल निर्भरताएं बनाएं: मेकफाइल उनका वर्णन करता है: बाइनरी ऑब्जेक्ट फ़ाइलों पर निर्भर करती है, प्रत्येक ऑब्जेक्ट फ़ाइल एक स्रोत फ़ाइल और हेडर पर निर्भर करती है ... जब मेक रन किया जाता है, तो फ़ाइलों की तारीख की तुलना यह निर्धारित करने के लिए की जाती है कि फिर से संकलित किए जाने की आवश्यकता क्या है। ।
एक सीधे Makefile में वर्णित सब कुछ का निर्माण नहीं करने के लिए एक लक्ष्य को लागू कर सकते हैं।
इसके अलावा वाक्य रचना प्रतिस्थापन, vpath प्रदान करता है
यह सब शेल स्क्रिप्ट्स में लिखा जा सकता है, जिसके साथ आपके पास पहले से ही है।