यह कमांड makepp_build_algorithm है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
मेकप_बिल्ड_एल्गोरिदम - मेकप मेकफ़ाइल को कैसे निष्पादित करता है
वर्णन
मेकप के आंतरिक भाग मूलभूत तरीकों से मानक यूनिक्स निर्माण से भिन्न हैं। यह पृष्ठ
विभिन्न दर्शनों का विस्तार से वर्णन करता है।
उल्टा बनाम आगे अनुमान
मेकप मानक यूनिक्स मेक से विपरीत दिशा में काम करता है। पारंपरिक यूनिक्स निर्माण
इसे बनाने का एक लक्ष्य दिया गया है, और फिर यह एक नियम ढूंढता है जो पात्रों से मेल खाता है
लक्ष्य फ़ाइलनाम. यदि लक्ष्य नियम की किसी भी निर्भरता से पुराना है, तो यह
पुनः बनाया गया है.
उदाहरण के लिए, इस पैटर्न नियम पर विचार करें:
%o: %cxx
$(CXX) $(CXXFLAGS) -c $(इनपुट) -o $(आउटपुट)
जब मेक को पता चलता है कि उसे "xyz.o" नामक फ़ाइल बनाने की आवश्यकता है, तो वह इसकी सूची में खोज करता है
पैटर्न नियम तब तक चलता है जब तक वह यह नहीं देख लेता कि "xyz.o" पैटर्न "%%" से मेल खाता है, और फिर यह लागू होता है
यह नियम।
मेकप्प विपरीत दिशा में काम करता है। यह सबसे पहले उन सभी फ़ाइलों की गणना करता है जो वह संभवतः कर सकता है
निर्भरता फ़ाइल नाम में वर्णों से मेल खाने वाले नियमों को लागू करके निर्माण करें। फिर कब
इसे एक फ़ाइल बनाने की आवश्यकता है, यह बस यह देखना चाहता है कि क्या यह उन फ़ाइलों में से एक है जिन्हें वह जानता है
कैसे बनाना है। ज्ञात फ़ाइलों की सूची पूर्ण फ़ाइल नाम के आधार पर संग्रहीत की जाती है।
जब मेकप उपरोक्त पैटर्न नियम का सामना करता है, तो यह निर्देशिका में सभी फ़ाइलों की खोज करता है
पैटर्न "%cxx" (यानी, "*.cxx") से मेल खाता हुआ। इनमें से प्रत्येक फ़ाइल के लिए, यह फिर याद रखता है
यह संबंधित ".o" फ़ाइल तैयार कर सकता है। यदि बाद में मेकप को पता चलता है कि यह
एक और ".cxx" फ़ाइल बना सकते हैं जो वर्तमान में मौजूद नहीं है, यह नियम भी लागू किया जाएगा
और संबंधित ".o" फ़ाइल चिह्नित की जाएगी।
यह कुछ हद तक अप्रभावी लग सकता है, लेकिन अधिकांश मामलों में यह उतना धीमा नहीं होता है,
और यह प्रायः सत्य है कि वस्तुतः बनाई जा सकने वाली सभी फ़ाइलें वास्तव में निर्मित होती हैं।
और बनाई जा सकने वाली फ़ाइलों की पूरी सूची जानने के कई फायदे हैं:
· वाइल्डकार्ड उन फ़ाइलों से मेल खा सकते हैं जो अभी तक मौजूद नहीं हैं लेकिन बनाई जा सकती हैं।
· स्वचालित निर्भरता स्कैनर द्वारा पता लगाए गए हेडर फ़ाइलों में यह नहीं है
अस्तित्व के लिए; मेकप जानता है कि वे कहाँ होंगे। (इस समस्या के अधिकांश अन्य समाधान
मान लें कि कोई भी हेडर जो अभी तक मौजूद नहीं है, वर्तमान निर्देशिका में है।)
· रिपॉजिटरी को लागू करना बहुत आसान है क्योंकि मेकप को पहले से पता होता है कि वह कौन सी फाइल करेगा
बना सकते हैं। (विवरण के लिए makepp_repositories देखें।)
· यह आसानी से निर्धारित करना संभव है कि कौन सी फ़ाइलें बनाई जा सकती हैं (देखें)।
"$(only_targets )" फ़ंक्शन।
· मेकप का "$(infer_objects)" फ़ंक्शन यह जानकर बहुत सरल हो जाता है कि वस्तुएं क्या हैं
उपलब्ध है.
फ़ाइलें बनाम शाब्दिक पैटर्न उपयोग करें
मेकप लक्ष्य फ़ाइल के साथ कमांड बनाता है, न कि टेक्स्ट पैटर्न के लिए
फ़ाइल का नाम। इसलिए यह एक ही फ़ाइल के लिए अलग-अलग नामों से भ्रमित नहीं होता है। इस प्रकार, के लिए
उदाहरण के लिए, मेकप को पता चल जाएगा कि "./xyz" और "xyz" एक ही फाइल हैं, जबकि अन्य मेक
उपयोगिताएँ नहीं हो सकतीं।
यह विशेष रूप से महत्वपूर्ण है क्योंकि (मानक मेक के विपरीत) मेकप मेकफाइल्स को लोड करता है
विभिन्न निर्देशिकाओं से. मेकफ़ाइल्स को अपेक्षाकृत स्वतंत्र बनाने के लिए, के साथ
शीर्ष-स्तरीय मेकफ़ाइल को कोई विशेष स्थान नहीं दिया गया है, प्रत्येक मेकफ़ाइल सभी फ़ाइलों को संदर्भित करता है
अपनी स्वयं की निर्देशिका के सापेक्ष। इस प्रकार यदि आप उपनिर्देशिका से मेकफ़ाइल लोड करते हैं
"अन्य_स्टफ", और वह मेकफ़ाइल "../xyz" को संदर्भित करता है, मेकप को फिर से एहसास होगा कि यह है
वही फ़ाइल जिसका ऊपर उल्लेख किया गया है। (यह सॉफ्ट-लिंक्ड डायरेक्टरी से भी भ्रमित नहीं होगा
नाम.)
संग्रहित निर्माण करें-
मेकप्प प्रत्येक फ़ाइल के बारे में बहुत अधिक जानकारी संग्रहीत करता है जिसे वह केवल तारीख से परे बनाता है
स्टाम्प (जो वह सब है जिसकी मानक परवाह करता है)। इस जानकारी में शामिल हैं:
· अंतिम बिल्ड पर इस फ़ाइल का हस्ताक्षर, ताकि हम जान सकें कि फ़ाइल स्वयं है या नहीं
बदल दिया है.
· प्रत्येक निर्भरता फ़ाइल के नाम, जिसमें अनुमानित फ़ाइलें और अन्य फ़ाइलें शामिल हैं
खुद ब खुद। यदि यह सूची बदलती है, तो मेकप मानता है कि इसे पुनर्निर्माण की आवश्यकता है।
· प्रत्येक निर्भरता के हस्ताक्षर. इस तरह, मेकप न केवल पुनर्निर्माण करना जानता है जब
निर्भरताएँ लक्ष्य से नई होती हैं, लेकिन जब वे बिल्कुल बदल जाती हैं। ये भी बनता है
इसके बजाय, क्रिप्टोग्राफ़िक चेकसम जैसे अन्य प्रकार के हस्ताक्षरों का उपयोग करना संभव है
फ़ाइल दिनांक से.
· संपूर्ण बिल्ड कमांड (और इसकी सीडब्ल्यूडी)। इस तरह यदि आप बिल्ड कमांड बदलते हैं
(उदाहरण के लिए, कंपाइलर विकल्प बदलें), मेकप फ़ाइलों को फिर से बनाना जानता है
स्वयं नहीं बदले हैं.
· वास्तुकला। यदि आपने अपना प्रोग्राम लिनक्स पर संकलित किया है और फिर स्विच करें
सोलारिस, मेकप स्वचालित रूप से सब कुछ पुन: संकलित करना जानता है।
Makepp प्रत्येक निर्देशिका में एक उपनिर्देशिका बनाता है जिसे वह छूता है जिसे ".makepp" कहा जाता है।
किसी फ़ाइल के लिए जानकारी बनाएँ फ़ाइल का नाम एक निर्देशिका में संग्रहीत किया जाता है .makepp/फ़ाइलनाम. अगर
आप इस उपनिर्देशिका को हटाते हैं या फ़ाइलों को बदलते हैं, मेकप सभी प्रभावित फ़ाइलों का पुनर्निर्माण करेगा।
अंतर्निहित लोड हो रहा है
यदि मेकप किसी निर्देशिका में लक्ष्य बनाने का प्रयास कर रहा है और उसके पास इसके लिए अभी तक कोई नियम नहीं है,
या यदि यह किसी निर्देशिका में वाइल्डकार्ड से मेल खाने वाली फ़ाइलों की तलाश कर रहा है, तो यह उसमें दिखेगा
यह देखने के लिए निर्देशिका का उपयोग करें कि मेकफ़ाइल मौजूद है या नहीं। यदि हां, तो मेकफ़ाइल लोड हो जाएगी
स्वचालित रूप से.
इसका मतलब यह है कि आपको आमतौर पर मेकप को स्पष्ट रूप से यह बताने की ज़रूरत नहीं है कि उसे कहां ढूंढना है
मेकफ़ाइल्स--आपको बस किसी अन्य निर्देशिका में फ़ाइल को संदर्भित करना है, और मेकप करेगा
स्वचालित रूप से पता लगाएं कि इसे कैसे बनाया जाए।
अंतर्निहित लोडिंग केवल तभी होगी जब निर्देशिका आपके लिए लिखने योग्य हो। इस प्रकार यदि आप चाहते हैं
मेकप को ऐसी चीजों का एक समूह बनाने की कोशिश करने से रोकें जो कभी नहीं बदलतीं, बस बनाएं
निर्देशिका केवल पढ़ने के लिए।
यदि आप किसी पेड़ के नीचे हैं तो अंतर्निहित लोडिंग नहीं होगी RootMakeppfile(.mk) और
अन्य मेकफ़ाइल उस पेड़ के बाहर है। यदि आप इसे एक बार चाहते हैं, तो आप दे सकते हैं
पेड़ के बाहर की हर चीज़ को निर्माण योग्य बनाने के लिए, मेकप करने के लिए "--do-build=/" विकल्प। अगर आप
हमेशा यह चाहते हैं, तो आप पेड़ के भीतर कहीं "load_makefile" कथन डाल सकते हैं
इसे स्पष्ट रूप से पेड़ से जोड़ें।
यदि अंतर्निहित लोडिंग आपके रास्ते में आती है (यानी, मेकप बहुत अधिक मेकफ़ाइल्स लोड करता है और यह बर्बाद हो जाता है
समय, अन्यथा आप वास्तव में नहीं चाहते कि वह इसमें वर्णित सभी चीज़ों को फिर से बनाने का प्रयास करे
मेकफ़ाइल्स), आप इसे "--noimplicit_load" कमांड का उपयोग करके सभी निर्देशिकाओं के लिए बंद कर सकते हैं
लाइन विकल्प, या आप इसे "no_implicit_load" का उपयोग करके चयनित निर्देशिकाओं के लिए बंद कर सकते हैं
आपके मेकफ़ाइल में कथन।
onworks.net सेवाओं का उपयोग करके ऑनलाइन makepp_build_algorithm का उपयोग करें