"सभी" मेकफाइल में क्या है?


105

मैंने मेकफाइल्स से संबंधित कुछ ट्यूटोरियल पढ़े लेकिन मेरे लिए यह अभी भी स्पष्ट नहीं है कि लक्ष्य "सभी" का क्या अर्थ है और यह क्या करता है।

कोई विचार?

जवाबों:


116

एक निर्माण, जैसा कि मेकफाइल इसे समझता है, इसमें बहुत सारे लक्ष्य होते हैं। उदाहरण के लिए, एक परियोजना बनाने के लिए जिसकी आपको आवश्यकता हो सकती है

  1. File1.o का file1.c से निर्माण करें
  2. File2.o को file2.c से बाहर बनाएँ
  3. File3.o को file3.c से बाहर बनाएँ
  4. फ़ाइल 1.o और file3.o में से निष्पादन योग्य 1 बनाएँ
  5. File2.o में से निष्पादन योग्य 2 बनाएँ

यदि आपने इस वर्कफ़्लो को मेकफाइल के साथ लागू किया है, तो आप प्रत्येक लक्ष्य को अलग से बना सकते हैं। उदाहरण के लिए, यदि आपने लिखा है

make file1.o

यदि आवश्यक हो तो यह केवल उस फ़ाइल का निर्माण करेगा।

का नाम allतय नहीं है। यह सिर्फ एक पारंपरिक नाम है; allलक्ष्य यह दर्शाता है कि यदि आप इसे लागू करते हैं, तो एक पूर्ण निर्माण करने के लिए सभी चीजों का निर्माण करना होगा । यह आमतौर पर एक डमी लक्ष्य होता है, जो किसी भी फाइल को नहीं बनाता है, लेकिन केवल अन्य फाइलों पर निर्भर करता है। ऊपर दिए गए उदाहरण के लिए, सभी आवश्यक निर्माण निष्पादनयोग्य निर्माण कर रहे हैं, अन्य फाइलें निर्भरता के रूप में खींची जा रही हैं। तो मेकफाइल में ऐसा दिखता है:

all: executable1 executable2

allलक्ष्य आम तौर पर मेकफाइल में पहला होता है, क्योंकि यदि आप केवल makeकमांड लाइन में लिखते हैं , तो लक्ष्य को निर्दिष्ट किए बिना, यह पहला लक्ष्य बनाएगा। और आप इसे होने की उम्मीद करते हैं all

allआमतौर पर एक .PHONYलक्ष्य भी है । यहाँ और जानें ।


31

जीएनयू मेक के लिए मैनुअल मानक लक्ष्यों कीall अपनी सूची के लिए एक स्पष्ट परिभाषा देता है ।

अगर मेकफाइल का लेखक उस सम्मेलन का अनुसरण कर रहा है, तो लक्ष्य allहोना चाहिए:

  1. पूरे कार्यक्रम को संकलित करें, लेकिन प्रलेखन का निर्माण न करें।
  2. डिफ़ॉल्ट लक्ष्य बनें। जैसा चल रहा है वैसा ही makeकरना चाहिए make all

1 प्राप्त करने के लिए allआम तौर पर एक .PHONYलक्ष्य के रूप में परिभाषित किया जाता है जो निष्पादन योग्य (ओं) पर निर्भर करता है जो पूरे कार्यक्रम को बनाते हैं:

.PHONY : all
all : executable

2 प्राप्त करने के लिए allया तो मेक फ़ाइल में परिभाषित पहला लक्ष्य होना चाहिए या डिफ़ॉल्ट लक्ष्य के रूप में सौंपा जाना चाहिए:

.DEFAULT_GOAL := all

3

यकीन नहीं होता कि यह किसी खास चीज के लिए है। यह केवल एक सम्मलेन है जिसे आप 'सभी' नियम की आपूर्ति करते हैं, और आम तौर पर इसका उपयोग पूरे प्रोजेक्ट को बनाने के लिए आवश्यक सभी उप-लक्ष्यों को सूचीबद्ध करने के लिए किया जाता है, इसलिए 'सभी' नाम। इसके बारे में एकमात्र खास बात यह है कि अक्सर लोग इसे मेकफाइल में पहले लक्ष्य के रूप में डालते हैं, जिसका अर्थ है कि केवल 'मेक' टाइप करने से वही काम होगा जो 'मेक ऑल' होगा।


2

लक्ष्य "ऑल" एक डमी लक्ष्य का एक उदाहरण है - "ऑल" नामक डिस्क पर कुछ भी नहीं है। इसका मतलब यह है कि जब आप "सभी बनाते हैं", हमेशा सोचते हैं कि इसे बनाने की आवश्यकता है, और इसलिए उस लक्ष्य के लिए सभी कमांड निष्पादित करते हैं। वे कमांड आमतौर पर ऐसे होंगे जो उन सभी अंत-उत्पादों का निर्माण करते हैं जिनके बारे में मेकफाइल जानता है, लेकिन यह कुछ भी कर सकता है।

डमी लक्ष्य के अन्य उदाहरण "साफ" और "इंस्टॉल" हैं, और वे उसी तरह से काम करते हैं।

यदि आपने इसे अभी तक नहीं पढ़ा है, तो आपको जीएनयू मेक मैनुअल पढ़ना चाहिए , जो एक उत्कृष्ट ट्यूटोरियल भी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.