एक साधारण प्रोग्राम का संकलन वर्कफ़्लो सरल है, मैं इसे एक छोटे ग्राफ के रूप में आकर्षित कर सकता हूं: स्रोत -> [संकलन] -> ऑब्जेक्ट [लिंकिंग] -> निष्पादन योग्य। इस ग्राफ में फ़ाइलें (स्रोत, वस्तु, निष्पादन योग्य) हैं, और नियम ( की शब्दावली बनाते हैं)। यह ग्राफ मेकफ़ाइल में निश्चित है।
जब आप लांच बनाने के लिए, यह Makefile, और बदल फ़ाइलों के लिए चेक पढ़ता है। यदि कोई है, तो यह नियम को ट्रिगर करता है, जो इस पर निर्भर करता है। नियमफ़ाइलें का उत्पादन/अद्यतन कर सकता है, जो अन्य नियम नियमों को ट्रिगर कर सकता है और इसी तरह। यदि आप एक अच्छा मेकफ़ाइल बनाते हैं, तो केवल नियम (कंपाइलर/लिंक कमांड) चलाए जाएंगे, जो निर्भरता पथ में संशोधित फ़ाइल से "अगली" है।
एक उदाहरण उठाओ Makefile, वाक्य रचना के लिए मैनुअल पढ़ने (वैसे भी, यह पहली नजर के लिए स्पष्ट है, w/ओ मैनुअल), और ग्राफ आकर्षित। परिणाम फ़ाइलों के नाम जानने के लिए आपको कंपाइलर विकल्पों को समझना होगा।
मेक ग्राफ उतना ही जटिल होना चाहिए जितना आप चाहते हैं। आप अनंत लूप भी कर सकते हैं (मत करो)! आप बना सकते हैं, जो नियम आपके लक्ष्य है, इसलिए केवल बाएं-खड़े फ़ाइलें ट्रिगर्स के रूप में उपयोग की जाएंगी।
फिर से: ग्राफ ड्रा!
जवाब bellow बहुत स्पष्ट हैं, लेकिन आप भी सिर्फ कमांड लाइन चला सकते हैं: 'program1 program2' बनाने जो आपके द्वारा दिए गए उदाहरण में दोनों लक्ष्यों का आह्वान करेगा। यदि आप सिर्फ 'प्रोग्राम 1' चाहते हैं, तो आप केवल 'मेक' चला सकते हैं (यह पहला लक्ष्य चलाएगा)। यदि आप बस 'प्रोग्राम 2' चाहते हैं, तो 'प्रोग्राम 2 बनाएं' चलाएं। आपके पास अधिक नियंत्रण है। और निश्चित रूप से, एक लक्ष्य 'सभी: प्रोग्राम 1 प्रोग्राम 2' केवल यही करेगा (यह पहला है, आपके 2 अन्य लक्ष्य चला रहा है)। किया हुआ। –