यदि कोई लक्ष्य निर्दिष्ट नहीं है, तो निर्माण करने के लिए "लक्ष्य" ऐप डिफ़ॉल्ट लक्ष्य को कैसे जानता है?


186

अधिकांश लिनक्स ऐप्स इसके साथ संकलित हैं:

make
make install clean

जैसा कि मैंने इसे समझा, तर्कों के रूप में बिल्ड टारगेट के नाम लेता है। तो installएक लक्ष्य है जो कुछ फ़ाइलों की प्रतिलिपि बनाता है और उसके बाद cleanएक लक्ष्य है जो अस्थायी फ़ाइलों को हटा देता है।

लेकिन makeअगर कोई तर्क निर्दिष्ट नहीं किया जाता है तो क्या लक्ष्य का निर्माण होगा (उदाहरण के लिए मेरे उदाहरण में पहली कमांड)?

जवाबों:


231

डिफ़ॉल्ट रूप से, यह पहले लक्ष्य को संसाधित करने से शुरू होता है जो डिफ़ॉल्ट लक्ष्य को. उर्फ के साथ शुरू नहीं करता है ; ऐसा करने के लिए, उसे अन्य लक्ष्यों को संसाधित करना पड़ सकता है - विशेष रूप से, पहला लक्ष्य उन पर निर्भर करता है।

जीएनयू मैनुअल बनाने कवर यह सब सामान, और एक आश्चर्यजनक रूप से आसान और सूचनात्मक पढ़ा है।


61
पहले लक्ष्य allको बुलाना सिर्फ एक सम्मेलन है।
तोबू

1
यदि आप अन्य उपयोगकर्ताओं के लिए इंस्टॉल कर रहे हैं, तो उन्हें अलग से चलाना उपयोगी है, क्योंकि आपको make installपूरे निर्माण के बजाय केवल sudo में चलाने की आवश्यकता है ।
स्कॉट वेल्स

2
FYI करें, जब आप किसी लक्ष्य को निर्दिष्ट नहीं करते तो क्या होता है, इसके लिए डिफ़ॉल्ट आदमी की प्रविष्टि कोई उल्लेख नहीं करती है ..
Sekm

2
अगर GNU मेनुअल इस सामान को कवर करता है, तो यह सवाल क्यों पूछा गया? नियम लिखने के लिए दस्तावेज़ बनाने में यह मैनुअल बहुत अच्छा है, लेकिन मेकफाइल लिखने के तरीके पर कोई उल्लेख नहीं करता है।
निक

1
मैं एक ऐसी फाइल बना रहा हूं, जो एक includeअन्य मेकफाइल है, जिसका पहला लक्ष्य है %.o : %.cpp। तो डिफ़ॉल्ट लक्ष्य है ... सभी .cpp फ़ाइलों का निर्माण करने के लिए?
क्वर्टी

175

दूसरों को कुछ सेकंड बचाने के लिए, और उन्हें मैनुअल पढ़ने से बचाने के लिए, यहाँ संक्षिप्त जवाब है। इसे अपनी फ़ाइल के शीर्ष पर जोड़ें:

.DEFAULT_GOAL := mytarget

mytarget अब वह लक्ष्य होगा जो "मेक" निष्पादित होने पर चलाया जाता है और कोई भी लक्ष्य निर्दिष्ट नहीं किया जाता है।

यदि आपके पास मेक (<= 3.80) का पुराना संस्करण है, तो यह काम नहीं करेगा। यदि यह मामला है, तो आप कर सकते हैं कि एनॉन का उल्लेख क्या है, बस इसे अपनी फ़ाइल के शीर्ष पर जोड़ें:

.PHONY: default
default: mytarget ;

संदर्भ: https://www.gnu.org/software/make/manual/html_node/How-Make-orks.s.


1
@nathan यह mytarget को डिफ़ॉल्ट लक्ष्य बनाता है यदि कोई बिना किसी पैरामीटर के "मेक" चलाता है।
शमूएल

1
नोट करें कि .DEFAULT_GOAL GNU मेक v3.80 में समर्थित प्रतीत नहीं होता है, और मैं पूर्व संस्करणों को भी मान लूंगा (v3.81 हालांकि इसका समर्थन करता है)। यदि आप मेक का एक पुराना संस्करण चला रहे हैं, तो आपको यह सुनिश्चित करना होगा कि आपका डिफ़ॉल्ट लक्ष्य आपकी मेक फ़ाइल में पहला / सर्वोच्च लक्ष्य है।
शमूएल

4
"... उन्हें मैनुअल पढ़ने से बचाने के लिए" एसओ के बिंदुओं में से एक है: ऐसे प्रश्नों के त्वरित उत्तर जो अन्यथा प्राचीन दस्तावेज के लिए खुदाई करने में थोड़ी देर लेंगे।
वाट्स इनबॉक्‍स

1
"इसे अपनी फ़ाइल के शीर्ष पर जोड़ें": शीर्ष पर जोड़ना एक आवश्यकता नहीं लगती है।
अमन दीप गौतम

2
यह सही उत्तर होना चाहिए। इस मामले में निहित जीत पर स्पष्ट।
सायन

34

जीएनयू मेक आपको एक विशेष चर का उपयोग करके डिफ़ॉल्ट बनाने के लक्ष्य को निर्दिष्ट करने की भी अनुमति देता है .DEFAULT_GOAL । आप इस चर को Makefile के बीच में भी अनसेट कर सकते हैं, जिससे फ़ाइल का अगला लक्ष्य डिफ़ॉल्ट लक्ष्य बन जाएगा।

रेफरी: द ग्नू मेक मैनुअल - स्पेशल वेरिएबल्स

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